jdk⾃带类实现json解析
JSON简介
JAVAScript Object Notation是⼀种轻量级的数据交换格式
具有良好的可读和便于快速编写的特性。
业内主流技术为其提供了完整的解决⽅案(有点类似于正则表达式 ,获得了当今⼤部分语⾔的⽀持)
JSON采⽤兼容性很⾼的⽂本格式,同时也具备类似于C语⾔体系的⾏为。 –
JSON作为数据是⽬前⽹络中主流的数据传输格式之⼀,应⽤⼗分⼴泛,说是使⽤率达到99%⼀点也不勉强
JSON⽀持的数据类型
我们要学习使⽤JSON解析,必须对JSON解析的规则原理有深刻的认识和了解,然后才知道它的⼀个实现原理
JSON⾥⾯的数据是以⼀种键值对的⽅式存在
(”key”:”value”)中值的类型可以是下⾯数据类型中的任意⼀种:
1. 数字(整数或浮点数)
2. 逻辑值(true 或 false)
3. 字符串(在双引号中)
4. 数组(在⽅括号中)
5. 函数
6. 对象(在⼤括号中)
7. null
JSON语法规则
JSON的语法规则⾮常的简单,就是使⽤
⼤括号’{}’,
中括号’[]’,
逗号’,’,
冒号’:’,
双引号’“”’。
数据类型:
嵌套对象、数组、字符串、数字、布尔值或空值。
我们在JSON解析中只有三中情况出现
1.{} 解析’⼤括号’类型
2. [ ] 解析是’中括号’类型
3. 其实只有两种,那第三种则是1与2的组合⽅法即”{’name’:’李书豪’ ,’hobby’:[‘编程’,’电竞’,’睡觉’]}”那么下⾯分别来看⼀些这三种类型以及解析
JSON基本语法与图例
Object(对象类型)
⽤{ }包含⼀系列⽆序的key–Value键值对表⽰,其中Key和Value之间⽤冒号分割,每个key-value之间⽤逗号分割。
⽐如:
Array(数组类型)
使⽤[ ]包含所有元素,每个元素⽤逗号分隔,元素可以是任意的值
⽐如:
组合形
JSON数据解析
JSON解析⼀定要掌握的两条规则:
1.如果看到是{ }–>使⽤JSONObject
2.如果看到的[ ]–>使⽤JSONArray解析
掌握了JSON的数据类型和基本语法后,下⾯我们将对JSON的各种语法类型进⾏详细解析(注意掌握两条规则的使⽤,掌握了JSON解析就那么回事)
纯对象(Object)的解析{ }:
import org.json.JSONException;
import org.json.JSONObject;
/**
JSON–>纯对象(Object)的解析
注:我们在eclipse⾥⾯操作JSON解析的时候需要第三⽅jar包的⽀持
* @author sKy°
* @date 2016-5-8
* @version 1.0
*/
public class Json01 {
public static void main(String[] args) {
// 编辑⼀个我们要解析的数据对象
// 根据JSON的官⽅定义,键,加"",值,如果是字符串,就加"",其他不加。
String json="{‘name’:‘李书豪’,‘age’:24}";
<span class="hljs-keyword">try</span> {
// 创建JSON解析对象(两条规则的体现:⼤括号⽤JSONObject,注意传⼊数据对象) JSONObject obj = new JSONObject(json);
// obj.后⾯有各种数据类型,根据对象来选择使⽤的数据类型
String name = String(“name”);
// 同理如上,这⾥的age为Int类型,我们就⽤对应的类型进⾏解析
int age = Int(“age”);
// 最后输出到控制台
System.out.println(name+"<—>"+age);
} <span class="hljs-keyword">catch</span> (JSONException e) {
e.printStackTrace();
}
}
}
纯数组(Array)的解析{ }:
/**import org.json.JSONArray; import org.json.JSONException;
对纯数组Aarry的解析
* @author sKy°
* @date 2016-5-8
* @version 1.0
*/
public class Json02 {
public static void main(String[] args) {
// 编辑⼀个我们要解析的数据对象
String json="[‘天津冷’,‘北京暖’,‘东京热’,‘南京凉’]";
<span class="hljs-keyword">try</span> {
// 创建JSON解析对象(两条规则的体现:中括号⽤JSONArray,注意传⼊数据对象)
JSONArray jArray = new JSONArray(json);
// 取得数组长度
int length = jArray.length();
// 回想数组的取值的⽅式? —>for循环遍历数组—>得到值
for (int i = 0; i < length; i++) {
// 根据解析的数据类型使⽤该类型的get⽅法得到该值,打印输出
String string = String(i);
System.out.print(string+",");
}
} <span class="hljs-keyword">catch</span> (JSONException e) {
<span class="hljs-comment">// TODO: handle exception</span>
}
}
}
组合类型的解析(⼀):
例⼦: String json=”{‘name’:’李书豪’,’girlFriend’:{‘name’:’⾼圆圆’,’age’:18}}”;
分析: 我们⾸先是解析外⾯的⼤括号的对象,然后,通过girlfFriend,获取到对应的被包含的⾥⾯⼤括号对象。所以这⾥我们需要建⽴⼀个类,封装对应的数据字段,根据setName ,setAge的⽅式在去得到
对应的值
/**
* 创建⼀个Person⽤于接收解析数据,封装对应字段
* @author sKy°
* @date 2016-5-8
* @version 1.0
*/
public class Person {
//    分析我们要解析的对象,根据解析对象的属性值去创建对应的属性值
//    根据分析我们所要解析的对象,两条属性 1.name(String类型) 2.是girlFrien(类类型,意味着还需要在类中去嵌套⼀个类(创建类部类也可))
// 封装字段
private String name;
private GirlFriend girlFriend; //类类型
// setter getter⽅法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public GirlFriend getGirlFriend() {
return girlFriend;
}js获取json的key和value
public void setGirlFriend(GirlFriend girlFriend) {
this.girlFriend = girlFriend;
}
// toString⽅法⽤于控制台输出
@Override
public String toString() {
return“Person [name=” + name + “, girlFriend=” + girlFriend + “]”; }
}
// 为了⽅便咱们看,这⾥就直接在下⾯创建了⼀个GirlFriend这个类
class GirlFriend{
/
/ 根据对象属性值,创建对应的值
private String name;
private int age;
// setter getter⽅法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// toString⽅法⽤于控制台输出
@Override
public String toString() {
return“GirlFriend [name=” + name + “, age=” + age + “]”;
}
}
开始解析:
/**import org.json.JSONException; import org.json.JSONObject;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。