Json解析精讲
来源:互联网 发布:sql server创建表 编辑:程序博客网 时间:2024/05/18 06:51
json解析可分为三种形式
原生的解析
谷歌的 Gson
阿里巴巴的 fastjson
以{开头 首先创建对象
[ 数组
{key:value,key2:vaule2...}
{key:value,key:{key:value....}}
{key:value,key:[{key:value...},{}...]}
[{key:value},{key:value}...]
原生的解析:
{} 创建jsonOBject
[]jsonArray
通过object对象得到 getString("json中的key")
推荐将数据存储到对象中
1入门
1
/**
2
* 只有一个对象{....}
3
*
4
*/
5
public class Test {
6
7
public static void main(String[] args) throws JSONException {
8
String json = "{name:'zhangsan',age:20,sex:'男'}";
9
10
// 使用原生的解析方式 解析
11
12
// 如果是对象 将json格式的string字符串装载到json对象中
13
JSONObject object = new JSONObject(json);
14
// 获得object中的数据
15
String name = object.getString("name");
16
int age = object.getInt("age");
17
String sex = object.getString("sex");
18
19
System.out.println(name+" "+age+" "+sex);
20
}
21
}
2对象套对象
1
/**
2
* 对象套这对象
3
* {}
4
* key:{}
5
*/
6
public class Test2 {
7
8
public static void main(String[] args) throws JSONException {
9
String json= "{person:{name:'tom',age:34}}";
10
// 得到最外面的 对象
11
JSONObject object = new JSONObject(json);
12
// 根据perosn键得到后面的对象
13
JSONObject object2 = object.getJSONObject("person");
14
// 后面的对象得到 里面的value
15
String name = object2.getString("name");
16
int age= object2.getInt("age");
17
System.out.println(name+""+age);
18
19
}
20
}
3用集合和类对象返回
1
public class Test3 {
2
3
public static void main(String[] args) throws JSONException {
4
String json = "{name:'jack',age:20,dept:{no:1,deptname:'android开发部'}}";
5
6
JSONObject object = new JSONObject(json);
7
8
String name = object.getString("name");
9
int age = object.getInt("age");
10
11
JSONObject object2 = object.getJSONObject("dept");
12
int no= object2.getInt("no");
13
String deptname = object2.getString("deptname");
14
15
System.out.println(name+" "+age+" "+no +" "+deptname);
16
17
// 如果返回可以使用一个map集合返回
18
Map<String,Object> map = new HashMap<>();
19
map.put("name", name);
20
map.put("age", age);
21
map.put("no", no);
22
map.put("deptname", deptname);
23
24
// 以一个类的对象的形式返回
25
26
Person person = new Person();
27
person.setName(name);
28
person.setAge(age);
29
Dept dept = new Dept();
30
dept.setNo(no);
31
dept.setDeptname(deptname);
32
person.setDept(dept);
33
System.out.println(person);
34
35
}
36
}
1
public class Dept {
2
3
int no;
4
String deptname;
5
6
public String toString() {
7
return "Dept [no=" + no + ", deptname=" + deptname + "]";
8
}
9
public int getNo() {
10
return no;
11
}
12
public void setNo(int no) {
13
this.no = no;
14
}
15
public String getDeptname() {
16
return deptname;
17
}
18
public void setDeptname(String deptname) {
19
this.deptname = deptname;
20
}
21
22
23
}
1
public class Person {
2
3
String name;
4
int age;
5
Dept dept;
6
public String getName() {
7
return name;
8
}
9
public void setName(String name) {
10
this.name = name;
11
}
12
public int getAge() {
13
return age;
14
}
15
public void setAge(int age) {
16
this.age = age;
17
}
18
public Dept getDept() {
19
return dept;
20
}
21
public void setDept(Dept dept) {
22
this.dept = dept;
23
}
24
25
public String toString() {
26
return "Person [name=" + name + ", age=" + age + ", dept=" + dept + "]";
27
}
28
29
30
}
4一个大数组
1
public class Test4 {
2
3
public static void main(String[] args) throws JSONException {
4
String json = "[{name:'tom',age:24},{name:'cindy',age:24},{name:'mandy',age:27},{name:'jerry',age:30}]";
5
6
JSONArray array = new JSONArray(json);
7
8
List<Map<String, Object>> list = new ArrayList<>();
9
List<Person> list2 = new ArrayList<>();
10
11
for (int i = 0; i < array.length(); i++) {
12
13
JSONObject object = array.getJSONObject(i);
14
String name = object.getString("name");
15
int age = object.getInt("age");
16
// 以list集合套map集合形式装数据的
17
Map<String, Object> map = new HashMap<>();
18
map.put("name", name);
19
map.put("age", age);
20
list.add(map);
21
// 以list集合套 对象的形式
22
Person person = new Person(name, age);
23
list2.add(person);
24
}
25
26
27
28
}
29
}
5集合装对象返回
1
public class Test5 {
2
3
public static void main(String[] args) throws JSONException {
4
String json = "{person:[{name:'tom',age:24},{name:'cindy',age:24},{name:'mandy',age:27},{name:'jerry',age:30}]}";
5
6
JSONObject object = new JSONObject(json);
7
8
JSONArray array = object.getJSONArray("person");
9
// 集合一定要在 循环外面创建
10
List<Person> list = new ArrayList<>();
11
12
for (int i = 0; i < array.length(); i++) {
13
14
JSONObject object2 = array.getJSONObject(i);
15
String name = object2.getString("name");
16
int age = object2.getInt("age");
17
18
Person person = new Person(name, age);
19
list.add(person);
20
}
21
22
System.out.println(list);
23
}
24
}
5用迭代器的方法
1
public class Test6 {
2
3
public static void main(String[] args) throws JSONException {
4
String json = "{key1:value1,key2:value2,key3:value3}";
5
// 另外一种解析方式
6
//1
7
JSONObject object= new JSONObject(json);
8
// 2 采用迭代器
9
// 把所有的键都放在迭代器中
10
Iterator iterator = object.keys();
11
12
while(iterator.hasNext()){
13
// 获取key
14
Object key = iterator.next();
15
// 通过key 获取value
16
Object value = object.get(key.toString());
17
System.out.println(value);
18
19
}
20
21
22
}
23
}