JSONObject和JSONArray的区别及用法

1.JSONObject和JSONArray的区别

(1)JSONObject是使用{}来表示的JSON对象,对应的JSON字符串格式是由{}包着的
比如:{“user”:”zhangsan”,”age”:21,”sex”:”male”}
而JSONArray是使用[{},{},…{}]来表示的多个JSON对象,对应的JSON字符串格式是由[]包着的,里面包括多个{}格式的单JSON对象
如下所示:

[
   {"name":"user1","age":12,"sex":"male"},
   {"name":"user2","age":22,"sex":"fmale"},
   {"name":"user3","age":17,"sex":"none"}
]

(2)解析方法不同
假设现在有两个json字符串jsonStr1为JSON对象字符串,jsonStr2为JSON数组字符串,如下:

String jsonStr1 = "{\"user\":\"wb\",\"age\":21}";
String jsonStr2 = "[{\"user\":\"wb\",\"age\":22},{\"user\":\"wb1\",\"age\":23},{\"user\":\"wb3\",\"age\":25}]";

jsonStr1解析方法:

JSONObject obj = JSONObject.parseObject(jsonStr1);
System.out.println(obj.get(“user”));
System.out.println(obj.get(“age”));

jsonStr2解析方法:

JSONArray arr = JSONArray.parseArray(jsonStr2);
// 获取json数组中的第一个json对象
System.out.println(arr.get(0));
// 如果要获取具体的字段值,可以通过属性名获取
System.out.println(arr.get(0).get(“user”));
// 通过get方法后面加字段的类型获取,JSONObject中提供了大量的静态方法,可以根据不通的类型获取不同的值
System.out.println(arr.get(0).getString(“user”));

2.JSONObject的用法

(1)构建JSONObject对象,然后通过键值对的put方法放入值即可,如下:

JSONObject obj = new JSONObject();
obj.put(key,value);

示例1:当没有复杂属性时

JSONObject userObj = new JSONObject();
userObj.put(“name”,”wb”);
userObj.put(“age”,21);
userObj.put(“sex”,”male”);

示例2:当有对象属性时,比如用户有一只白颜色的猫,如下

JSONObject userObj = new JSONObject();
// 用户基本属性
userObj.put(“name”, “wb”);
userObj.put(“age”, 21);
userObj.put(“sex”, “male”);

// 猫
JSONObject catObj = new JSONObject();
catObj.put(“color”, “white”);
// 将猫作为用户的一个属性放入用户对象中
userObj.put(“cat”, catObj);

示例3:当有数组属性时,比如用户有三个朋友:

JSONObject userObj = new JSONObject();
userObj.put(“name”, “wb”);
userObj.put(“age”, 23);
userObj.put(“sex”, “male”);
JSONArray friends = new JSONArray();
// 朋友1
JSONObject friend1 = new JSONObject();
friend1.put(“name”, “name1”);
friend1.put(“age”, 23);
friend1.put(“sex”, “male”);
// 朋友2
JSONObject friend2 = new JSONObject();
friend2.put(“name”, “name2”);
friend2.put(“age”, 24);
friend2.put(“sex”, “fmale”);
// 朋友3
JSONObject friend3 = new JSONObject();
friend3.put(“name”, “name3”);
friend3.put(“age”, 25);
friend3.put(“sex”, “fmale”);

friends.add(friend1);
friends.add(friend2);
friends.add(friend3);
userObj.put(“friends”, friends);

(2)将json格式的字符串反序列化为对象:
方法一:通过JSONObject的静态方法依次解析每个对象的单个属性,然后设置到对象中

String userJson = “{\”name\”:\”wb\”,\”age\”:23}”;

JSONObject userObj = new JSONObject();
User user = new User();
user.setName(userObj.getString(“name”));
user.setAge(userObj.getInteger(“age”));

方法二:直接通过实体类进行反序列化:

String userJson = “{\”name\”:\”wb\”,\”age\”:23}”;
User user = JSONObject.parseObject(userJson, User.class);
System.out.println(user);

3.JSONArray的用法

(1)JSONArray的构建方法类似于上面的一个人有三个朋友,三个朋友就是一个JSONArray数组

JSONArray arr = new JSONArray();
JSONObject obj1 = new JSONObject();
// 添加属性
obj1.put(key,value);
JSONObject obj2 = new JSONObject();
// 添加属性
obj2.put(key,value);
JSONObject obj3 = new JSONObject();
// 添加属性
obj3.put(key,value);
// 将单个对象放入到json数组中
arr.add(obj1);
arr.add(obj2);
arr.add(obj3);

(2)解析方法

方法一:将JSON数组解析为JSONArray对象,然后单个属性去依次解析:

String jsonStr2 = "[{\"user\":\"wb\",\"age\":22},{\"user\":\"wb1\",\"age\":23},{\"user\":\"wb3\",\"age\":25}]";
JSONArray arr = JSONArray.parseArray(jsonStr2);
List<User> userList = new ArrayList<>();
for (Object jsonObj : arr) {
   JSONObject o = (JSONObject) jsonObj;
   User user = new User();
   user.setName(o.getString("name"));
   user.setAge(o.getInteger("age"));
   userList.add(user);
}

方法二:直接反序列化为List集合

String jsonStr2 = "[{\"user\":\"wb\",\"age\":22},{\"user\":\"wb1\",\"age\":23},{\"user\":\"wb3\",\"age\":25}]";
List<User> users = JSONObject.parseObject(jsonStr2, new TypeReference<List<User>>(){}.getType());
for (User user : users) {
   System.out.println(user);
}

注意:文章属于作者原创,如果转发,请注明文章来源:www.jinnianshizhunian.vip(个人小站-积累点滴知识)