Categories
跨服战场

JSONObject和JSONArray讲解

一:com.alibaba.fastjson1、JSONObject和JSONArray的区别2、如何从字符串String获得JSONObject对象和JSONArray对象3、如何从JSONArray中获得JSONObject对象4、获取JSON内的数据

二:net.sf.json1、JSONObject与JSONArray使用方法区别(1)创建方法不同(2)获取方式不同(3)解析JSON字符串

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 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解析一个Map、HashMap,则会将整个对象的放进一个数组的值中

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 arrayList = new ArrayList();

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)索引。

感谢您的点赞与关注。