JSONObject与JSONArray使用的场景区别;

  • 想通过键值对的形式获取数据,使用JSONObject。
  • 如果后台查询的是某个bean的list集合向前端页面传递,使用JSONArray。

一:com.alibaba.fastjson

1、JSONObject和JSONArray的区别
  • JSONObject的数据表示形式
{
  "id": "100",
  "name": "张三",
  "title": "测试",
  "content": null
}
{ "id" : "100", "name" : "张三", "title" : "测试", "content" : null } 
  • JSONArray的数据表示形式(包含2个或2个以上的JSONObject)
[
  {
    "id": "100",
    "name": "张三",
    "title": "测试",
    "content": null
  },
  {
    "id": "101",
    "name": "李四",
    "title": "备注",
    "content": null
  }
]
[{ "id" : "100", "name" : "张三", "title" : "测试", "content" : null } , { "id" : "101", "name" : "李四", "title" : "备注", "content" : null }];

  经过对比,不难看出,可以看到一个很明显的区别,JSONObject最外面用的是 { } ,JSONArray最外面用的是 [ ]

2、如何从字符串String获得JSONObject对象和JSONArray对象
{
  "name": [
    "boy",
    "girl"
  ]
}
String test = "{\"name\":[\"boy\",\"girl\"]}";
JSONObject jsonObject = JSON.parseObject(test); //string转为object类型
System.out.println("===============================================================");
System.out.println("jsonObject:" + jsonObject);
JSONArray array = jsonObject.getJSONArray("name"); //输出 ["boy","girl"]
System.out.println("===============================================================");
System.out.println("array:" + array);
String str = JSONObject.toJSONString(array);
System.out.println("===============================================================");
System.out.println("str:" + str);

输出结果:

===============================================================
jsonObject:{"name":["boy","girl"]}
===============================================================
array:["boy","girl"]
===============================================================
str:["boy","girl"]
3、如何从JSONArray中获得JSONObject对象

  大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样

JSONObject  jsonObject = jsonArray.getJSONObject(i);

例1:(使用 getJSONObject(i) 要注意数组越界异常)

[
  {
    "id": "100",
    "name": "张三",
    "title": "测试",
    "content": null
  },
  {
    "id": "101",
    "name": "李四",
    "title": "标题",
    "content": null
  }
]
String json = "[{\"id\" :\"100\", \"name\" :\"张三\", \"title\" :\"测试\", \"content\" :null },{\"id\" :\"101\", \"name\" :\"李四\", \"title\" :\"标题\", \"content\" :null }]";
JSONArray jsonArray = JSONArray.parseArray(json);
JSONObject jsonObject = jsonArray.getJSONObject(1); // 这里的jsonObject得到的数据就是第二个JSONObject
System.out.println("===============================================================");
System.out.println("jsonObject:" + jsonObject);

输出结果:

===============================================================
jsonObject:{"name":"李四","id":"101","title":"标题"}

例2:

{
  "id": "100",
  "name": "张三",
  "content": [
    {
      "age": "20",
      "sex": "男"
    }
  ]
}
String json = "{\"id\":\"100\",\"name\":\"张三\",\"content\":[{\"age\":\"20\",\"sex\":\"男\"}]}";
JSONObject jsonObject = JSONObject.parseObject(json);
JSONArray jsonArray = (JSONArray) jsonObject.get("content");
System.out.println("===============================================================");
System.out.println("jsonArray:" + jsonArray);
for (int i = 0; i < jsonArray.size(); i++) {
    //第一种
    JSONObject jsonObject1 = (JSONObject) jsonArray.get(i);
    String age = String.valueOf(jsonObject1.get("age"));
    System.out.println("===============================================================");
    System.out.println("jsonObject1:" + age);
    //第二种
    JSONObject jsonObject2 = jsonArray.getJSONObject(i);
    String age1 = String.valueOf(jsonObject2.get("age"));
    System.out.println("===============================================================");
    System.out.println("jsonObject2:" + age1);
}

输出结果:

===============================================================
jsonArray:[{"sex":"男","age":"20"}]
===============================================================
jsonObject1:20
===============================================================
jsonObject2:20
4、获取JSON内的数据

例如:

{
  "id": "100",
  "name": "张三",
  "title": "测试",
  "content": null
}
 String json = "{\"id\" :\"100\", \"name\" :\"张三\", \"title\" :\"测试\", \"content\" :null }";
 JSONObject jsonObject = JSONObject.parseObject(json);
 int ids = jsonObject.getInteger("id"); // 这里的ids得到的数据就是100.
 String names = jsonObject.getString("name"); // 这里的names得到的数据就是张三.
 System.out.println("===============================================================");
 System.out.println("ids:" + ids);
 System.out.println("names:" + names);

输出结果:

===============================================================
ids:100
names:张三

二:net.sf.json

1、JSONObject与JSONArray使用方法区别
(1)创建方法不同
  • JSONObject创建的方法

//创建JsonObject第一种方法

JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "张三");
jsonObject.put("title", "测试");
jsonObject.put("content", "内容");
System.out.println("===============================================================");
System.out.println("jsonObject:" + jsonObject);

输出结果:

===============================================================
jsonObject:{"name":"张三","title":"测试","content":"内容"}

//创建JsonObject第二种方法

Map<String, String> map = new LinkedHashMap<>();
map.put("name", "张三");
map.put("title", "测试");
map.put("content", "内容");
System.out.println("===============================================================");
System.out.println("jsonObject2:" + JSONObject.fromObject(map));
System.out.println("JSONArray解析一个Map、HashMap,则会将整个对象的放进一个数组的值中");
System.out.println("jsonObject3:" + JSONArray.fromObject(map));

注意:如果JSONArray解析一个Map、HashMap,则会将整个对象的放进一个数组的值中

输出结果:

===============================================================
jsonObject2:{"name":"张三","title":"测试","content":"内容"}
JSONArray解析一个MapHashMap,则会将整个对象的放进一个数组的值中
jsonObject3:[{"name":"张三","title":"测试","content":"内容"}]
  • JSONArray创建的方法

//创建一个JsonArray方法1

JSONArray jsonArray = new JSONArray();
jsonArray.add(0, "张三");
jsonArray.add(1, "测试");
jsonArray.add(2, "内容");
System.out.println("===============================================================");
System.out.println("jsonArray:" + jsonArray);

输出结果:

===============================================================
jsonArray:["张三","测试","内容"]

//创建JsonArray方法2

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("张三");
arrayList.add("测试");
arrayList.add("内容");
System.out.println("===============================================================");
System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));

输出结果:

===============================================================
jsonArray2:["张三","测试","内容"]
  • 创建复杂的JSONArray
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("id", "100");
jsonObject2.put("age", "20");
jsonObject2.put("sex", "男");
jsonObject2.element("Array", arrayList);
System.out.println("===============================================================");
System.out.println("jsonObject2:" + jsonObject2);

输出结果:

===============================================================
jsonObject2:{"id":"100","age":"20","sex":"男","Array":["张三","测试","内容"]}
(2)获取方式不同
  • 获取JSONObject中值
String names = jsonObject.getString("name");
System.out.println("===============================================================");
System.out.println("names:" + names);

输出结果:

===============================================================
names:张三
  • 获取JSONArray中的值
String names2 = arrayList.get(0);
System.out.println("===============================================================");
System.out.println("names2:" + names2);

输出结果:

===============================================================
names2:张三
(3)解析JSON字符串
{
  "id": "100",
  "age": "20",
  "sex": "男",
  "Array": [
    "张三",
    "测试",
    "内容"
  ]
}
String jsonString = "{\"id\":\"100\",\"age\":\"20\",\"sex\":\"男\",\"Array\":[\"张三\",\"测试\",\"内容\"]}";
//将Json字符串转为java对象
JSONObject obj = JSONObject.fromObject(jsonString);
//获取Object中的id
if (obj.has("id")) {
    System.out.println("id:" + obj.getString("id"));
}
//获取ArrayObject
if (obj.has("Array")) {
    JSONArray array = obj.getJSONArray("Array");
    for (int i = 0; i < array.size(); i++) {
        System.out.println("Array:" + array.getString(i) + " ");
    }
}

输出结果:

id:100
Array:张三 
Array:测试 
Array:内容 

拓展:

例1:

JSONObject j1 = new JSONObject();
j1.put("小明", "男");
j1.put("小红", "女");//put方法里放的key和value都是object
System.out.println("j1put:" + j1);//{"小明":"男","小红":"女"}
JSONObject j2 = new JSONObject();
j2.element("小明", "男");
System.out.println("j2element:" + j2);//{"小明":"男"}
j2.accumulate("小明", "女");
System.out.println("j2accumulate:" + j2);//{"小明":["男","女"]}
j2.accumulate("小红", "女");
System.out.println("j2accumulate:" + j2);//{"小明":["男","女"],"小红":"女"}
JSONArray array = j2.getJSONArray("小明");
System.out.println("array:" + array);//["男","女"]
Object o = array.get(0);
System.out.println("o:" + o);//男

例2:

[
  {
    "user": {
      "name": "张三",
      "age": "20"
    }
  },
  {
    "score": {
      "yuwen": "80",
      "shuxue": "90"
    }
  }
]
String joStr = "{\"name\":\"张三\",\"age\":\"20\"}";
//将json字符串转化为JSONObject
JSONObject jsonObject = JSONObject.fromObject(joStr);
//通过getString("")分别取出里面的信息
String name = jsonObject.getString("name");
String age = jsonObject.getString("age");
//输出  张三 20
System.out.println("===============================================================");
System.out.println(name + " " + age);

String jaStr = "[{\"user\":{\"name\":\"张三\",\"age\":\"20\"}},{\"score\":{\"yuwen\":\"80\",\"shuxue\":\"90\"}}]";
//将jsonArray字符串转化为JSONArray
JSONArray jsonArray = JSONArray.fromObject(jaStr);
//取出数组第一个元素
JSONObject jUser = jsonArray.getJSONObject(0).getJSONObject("user");
//取出第一个元素的信息,并且转化为JSONObject
String name2 = jUser.getString("name");
String age2 = jUser.getString("age");
//输出 张三 20
System.out.println("===============================================================");
System.out.println(name2 + " " + age2);
//取出数组第二个元素,并且转化为JSONObject
JSONObject jScore = jsonArray.getJSONObject(1).getJSONObject("score");
//取出第二个元素的信息
String yuwen = jScore.getString("yuwen");
String shuxue = jScore.getString("shuxue");
//输出  80 90
System.out.println("===============================================================");
System.out.println(yuwen + "  " + shuxue);

输出结果:

===============================================================
张三 20
===============================================================
张三 20
===============================================================
80  90

  这里要注意put、element、accumulate的使用区别。它们分别都是添加键值对,put方法的key和value都可以是object,另外两个方法的key必须是 string。当遇到key相同时,put方法会把value值替换掉,而accumulate会在当前key下生成一个JSONArray。element方法遇到key相同时,如果value不是空则执行accumulate方法,否则会移除这个key。

  此外JSONObject.fromObject()方法可以将一个Object对象转化为JsonObject对象,打印出来的是Json格式。j1.getJSONObject()方法可以将一个String字符串转化为JSONObject对象。

  JSONObject对象还有很多别的方法,可以参看API。 在JSONObject的方法里put作为前缀的如果转化失败会出现异常,所以要try catch或者throw出去,而opt前缀的方法不会抛出异常。

  JSONArray可以看成一个数组的形式。它使用add方法来添加元素,支持按索引添加,也可以之间添加一个Collection。取值时使用get方法,参数是index(第一个是0)索引。

在这里插入图片描述

感谢您的点赞与关注。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐