想了解JsonObject和JsonArray的区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于jsonobject和map的相关问题,此外,我们还将为您介绍关于Android中的JSO
想了解JsonObject和JsonArray的区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于jsonobject和map的相关问题,此外,我们还将为您介绍关于Android中的JSONObject和JSONArray解析json数据、Android中的JSONObject和JSONArray解析json数据_PHP教程、Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断、fastjson如何判断JSONObject和JSONArray的新知识。
本文目录一览:- JsonObject和JsonArray的区别(jsonobject和map)
- Android中的JSONObject和JSONArray解析json数据
- Android中的JSONObject和JSONArray解析json数据_PHP教程
- Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
- fastjson如何判断JSONObject和JSONArray
JsonObject和JsonArray的区别(jsonobject和map)
很简单:
区别在于JSONObject是一个{}包裹起来的一个对象(Object),而JSONArray则是[]包裹起来的一个数组(Array)。
Android中的JSONObject和JSONArray解析json数据
今天介绍一下关于json数据解析,我们使用Android中的JSONObject和JSONArray解析json数据,有android开发的朋友可以参考一下。
String strJson = "{"students":[{"name":"Jack","age":12}, {"name":"Vista","age":23}, {"name":"Kaka","age":22}, {"name":"Hony","age":31}]}";
try {
JSONObject jo = new JSONObject(strJson);
JSONArray jsonArray = (JSONArray) jo.get("students");
for (int i = 0; i
JSONObject o = (JSONObject) jsonArray.get(i);
System.out.println("name:" + o.getString("name") + "," + "age:"
+ o.getInt("age"));
}
} catch (JSONException e) {
e.printStackTrace();
}
2.使用gson中的JsonReader解析json数据
try {
String string = "{"class":1, "students":[{"name":"jack", "age":21},{"name":"kaka", "age":21},{"name":"lucy", "age":21}]}";
StringReader sr = new StringReader(string);
JsonReader jr = new JsonReader(sr);
jr.beginObject();
if (jr.nextName().contains("class")) {
System.out.println("班级: " + jr.nextString());
if (jr.nextName().equals("students")) {
jr.beginArray();
while (jr.hasNext()) {
jr.beginObject();
if (jr.nextName().equals("name"))
System.out.print("姓名:" + jr.nextString());
if (jr.nextName().equals("age")) {
System.out.println(" , 年龄:" + jr.nextInt());
}
jr.endObject();
}
jr.endArray();
}
}
jr.endObject();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Json解析库gson: http://code.google.com/p/google-gson/
Android中的JSONObject和JSONArray解析json数据_PHP教程
今天介绍一下关于json数据解析,我们使用Android中的JSONObject和JSONArray解析json数据,有android开发的朋友可以参考一下。
String strJson = "{"students":[{"name":"Jack","age":12}, {"name":"Vista","age":23}, {"name":"Kaka","age":22}, {"name":"Hony","age":31}]}";
try {
JSONObject jo = new JSONObject(strJson);
JSONArray jsonArray = (JSONArray) jo.get("students");
for (int i = 0; i
JSONObject o = (JSONObject) jsonArray.get(i);
System.out.println("name:" + o.getString("name") + "," + "age:"
+ o.getInt("age"));
}
} catch (JSONException e) {
e.printStackTrace();
}
2.使用gson中的JsonReader解析json数据
try {
String string = "{"class":1, "students":[{"name":"jack", "age":21},{"name":"kaka", "age":21},{"name":"lucy", "age":21}]}";
StringReader sr = new StringReader(string);
JsonReader jr = new JsonReader(sr);
jr.beginObject();
if (jr.nextName().contains("class")) {
System.out.println("班级: " + jr.nextString());
if (jr.nextName().equals("students")) {
jr.beginArray();
while (jr.hasNext()) {
jr.beginObject();
if (jr.nextName().equals("name"))
System.out.print("姓名:" + jr.nextString());
if (jr.nextName().equals("age")) {
System.out.println(" , 年龄:" + jr.nextInt());
}
jr.endObject();
}
jr.endArray();
}
}
jr.endObject();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Json解析库gson: http://code.google.com/p/google-gson/
Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断
1.Fastjson
我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢?
try{ Object object = JSON.parse(a); if (object instanceof JSONObject){ //JSONObject } if (object instanceof JSONArray){ //JSONArray } }catch (com.alibaba.fastjson.JSONException e){ //非JSON字符串 }
2.org.json.JSON
直接使用JSON库做解析的情况不多,但是这里也稍微写一下
log.info(JSON.parse(jsonStr).getClass().getName()); try { Object json = new JSONTokener(jsonStr).nextValue(); log.info( json.getClass().toString()); // json.toString(); if(json instanceof JSONObject){ log.info("is JSONObject"); JSONObject jsonObject = (JSONObject)json; //further actions on jsonObjects //... }else if (json instanceof JSONArray){ log.info("is JSONArray"); JSONArray jsonArray = (JSONArray)json; //further actions on jsonArray //... } }catch (Exception e){ e.printstacktrace(); }
3.GSON,也是蛮强大的一个库,没有依赖包,只是在反射到Map的使用上有点麻烦。
GSON里面最有意思的就是JsonPrimitive,原始JSON。
先给代码
String str = ""; JsonParser jsonParser = new JsonParser(); try{ JsonElement jsonElement = jsonParser.parse(str); log.info("jsonElement "+jsonElement.getClass().getName()); if (jsonElement.isJsonObject()){ //JsonObject log.info(jsonElement.getAsJsonObject().get("aa").getAsstring()); } if (jsonElement.isJsonArray()){ //JsonArray log.info(jsonElement.getAsJsonArray().get(0).getAsJsonObject().get("aa").getAsstring()); } if (jsonElement.isJsonNull()){ //空字符串 log.info(jsonElement.getAsstring()); } if (jsonElement.isJsonPrimitive()){ log.info(jsonElement.getAsstring()); } }catch (Exception e){ //非法 // e.printstacktrace(); log.info("非法 "+e.getMessage()); }
可知,GSON中定义了四个JSON类型,分别是JSONObject,JSONArray,JSONPrimitive,JSONNull。
但是官方对JSON的严格定义是{}为JSONObject,[]为JSONArray。
所以只用JsonElement jsonElement = jsonParser.parse(str);能正常解析的字符串并不意味着是一个合法的JSON,必须满足
jsonElement.isJsonObject()或者jsonElement.isJsonArray()。
另说一个题外话,关于对jsonElement.getAsJsonPrimitive()方法的理解。
JsonPrimitive即时指JSON value的原始数据,包含三种类型,数字,双引号包裹的字符串,布尔。
所以JsonPrimitive.toString得到的不是实际的值,而是JSON中的:后面的完整内容,需要再做一次getAs。
例如
String str = "{\"aa\":\"aa\"}"; JsonElement jsonElement = jsonParser.parse(str); log.info(jsonElement.getAsJsonObject().get("aa").getAsstring()); str = "{\"aa\":true}"; jsonElement = jsonParser.parse(str); jsonElement.getAsJsonObject().get("aa").getAsBoolean(); str = "{\"aa\":1.2}"; jsonElement.getAsJsonObject().get("aa").getAsBigDecimal();
所以Gson还有一个好处就是自带转换为java常规类型。
fastjson如何判断JSONObject和JSONArray
1、fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法。这里用一个还算可以的方法,算是实现了这个效果。
网上贴代码,有时候不把引入的包贴上去,自己使用的话还真不知道是导入那个包咧。
maven依赖的如下所示:
1 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
2 <dependency>
3 <groupId>com.alibaba</groupId>
4 <artifactId>fastjson</artifactId>
5 <version>1.2.47</version>
6 </dependency>
实现代码如下所示:
例子主要实现的是解析第一层,然后解析第二层,解析第二层的时候判断是否是JSONArray还是JSONObject类型的。最后我是直接输出的,你肯定是将解析出的信息进行其他操作,这里不做叙述了。
1 package com.fline.aic.utils;
2
3 import com.alibaba.fastjson.JSONArray;
4 import com.alibaba.fastjson.JSONObject;
5
6 public class FastJosnUtils {
7
8 /**
9 * FastJSON
10 */
11 public static void fastJson() {
12 // 1、Json字符串,JSONObject类型的
13 // String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
14 // + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
15 // + " \"condition\": \"null\",\r\n" + " \"data\": {\r\n" + " \"DataSource\": \"''P33''\",\r\n"
16 // + " \"DataStamp\": \"''2018-08-25''\",\r\n" + " \"GovScCode\": \"''aaa''\",\r\n"
17 // + " \"OperEffDate\": \"''2018-05-02''\",\r\n" + " \"OrgCode\": \"''ww''\",\r\n"
18 // + " \"OrgDesc\": \"''ss''\",\r\n" + " \"OrgId\": \"1\",\r\n"
19 // + " \"OrgName\": \"''11111''\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
20 // + " \"OrgShortName\": \"''ss''\",\r\n" + " \"OrgStatus\": \"''ss''\",\r\n"
21 // + " \"OrgType\": \"''ss''\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
22 // + " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
23 // + " }\r\n" + "}";
24
25 // 1、Json字符串,JSONArray类型的
26 String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
27 + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
28 + " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"''P33''\",\r\n"
29 + " \"DataStamp\": \"''2018-08-25''\",\r\n" + " \"GovScCode\": \"''aaa''\",\r\n"
30 + " \"OperEffDate\": \"''2018-05-02''\",\r\n" + " \"OrgCode\": \"''ww''\",\r\n"
31 + " \"OrgDesc\": \"''ss''\",\r\n" + " \"OrgId\": \"1\",\r\n"
32 + " \"OrgName\": \"''11111''\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
33 + " \"OrgShortName\": \"''ss''\",\r\n" + " \"OrgStatus\": \"''ss''\",\r\n"
34 + " \"OrgType\": \"''ss''\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
35 + " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
36 + " },{\r\n" +
37 " \"DataSource\": \"''P33''\",\r\n" +
38 " \"DataStamp\": \"''2018-08-25''\",\r\n" +
39 " \"GovScCode\": \"''aaa''\",\r\n" +
40 " \"OperEffDate\": \"''2018-05-02''\",\r\n" +
41 " \"OrgCode\": \"''ww''\",\r\n" +
42 " \"OrgDesc\": \"''ss''\",\r\n" +
43 " \"OrgId\": \"1\",\r\n" +
44 " \"OrgName\": \"''11111''\",\r\n" +
45 " \"OrgSeq\": \"11\",\r\n" +
46 " \"OrgShortName\": \"''ss''\",\r\n" +
47 " \"OrgStatus\": \"''ss''\",\r\n" +
48 " \"OrgType\": \"''ss''\",\r\n" +
49 " \"ParentOrgId\": \"0\",\r\n" +
50 " \"RegAddress\": \"''ww''\",\r\n" +
51 " \"RegDate\": \"\",\r\n" +
52 " \"RegionId\": \"1\"\r\n" +
53 " }]\r\n" + "}";
54 // 解析第一层{},由于多种json写到了一起,所以直接引用到了包,自行开发引用自己的Json包就行。
55 JSONObject jsonObject = JSONObject.parseObject(message);
56 String catalogId = jsonObject.getString("catalogId");
57 String schemaTableName = jsonObject.getString("tableName");
58 String type = jsonObject.getString("type");
59 String condition = jsonObject.getString("condition");
60 System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
61 + ", condition:" + condition + "}");
62
63 // 解析第二层,如果根据需求可以判断是否是JSONObject还是JSONArray
64 JSONArray jsonArray = new JSONArray();
65 JSONObject jsonData = new JSONObject();
66 String data = jsonObject.getString("data");
67 //百度了很对,也没有找到合适的,我是这样判断的是否是JSONArray还是JSONObject
68 if (data.contains("[") && data.contains("]")) {
69 jsonArray = JSONArray.parseArray(data);
70 System.out.println("jsonArray: " + jsonArray);
71 //然后可以解析第二层
72 for(int i=0;i< jsonArray.size();i++) {
73 JSONObject jsonArrayObject = (JSONObject) jsonArray.get(i);
74 String DataSource = jsonArrayObject.getString("DataSource");
75 String DataStamp = jsonArrayObject.getString("DataStamp");
76 String OrgName = jsonArrayObject.getString("OrgName");
77 String RegAddress = jsonArrayObject.getString("RegAddress");
78 //...等等字段
79 System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
80 }
81
82 } else {
83 jsonData = JSONObject.parseObject(data);
84 System.out.println("jsonData: " + jsonData);
85 //然后可以解析第二层
86 String DataSource = jsonData.getString("DataSource");
87 String DataStamp = jsonData.getString("DataStamp");
88 String OrgName = jsonData.getString("OrgName");
89 String RegAddress = jsonData.getString("RegAddress");
90 //...等等字段
91 System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
92 }
93 }
94
95 public static void main(String[] args) {
96 fastJson();
97
98 }
99 }
2、JSON官方的判断json字符串是JSONArray还是JSONObject类型的。是这个样子搞得,百度一下,教程还是很多的。这里也简单贴一下。
1 <!-- https://mvnrepository.com/artifact/org.json/json -->
2 <dependency>
3 <groupId>org.json</groupId>
4 <artifactId>json</artifactId>
5 <version>20160810</version>
6 </dependency>
案例代码如下所示:
1 package com.fline.aic.utils;
2
3 import org.json.JSONArray;
4 import org.json.JSONObject;
5 import org.json.JSONTokener;
6
7 public class OrgJsonUtils {
8
9 /**
10 * 单层的orgJson判断是否是JSONObject还是JSONArray.
11 */
12 public static void simpleJSONObjectOrgJson() {
13 String message = "[{\r\n" + " \"DataSource\": \"''P33''\",\r\n"
14 + " \"DataStamp\": \"''2018-08-25''\",\r\n" + " \"GovScCode\": \"''aaa''\",\r\n"
15 + " \"OperEffDate\": \"''2018-05-02''\",\r\n" + " \"OrgCode\": \"''ww''\",\r\n"
16 + " \"OrgDesc\": \"''ss''\",\r\n" + " \"OrgId\": \"1\",\r\n"
17 + " \"OrgName\": \"''11111''\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
18 + " \"OrgShortName\": \"''ss''\",\r\n" + " \"OrgStatus\": \"''ss''\",\r\n"
19 + " \"OrgType\": \"''ss''\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
20 + " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
21 + " }]";
22 Object json = new JSONTokener(message).nextValue();
23 if (json instanceof JSONObject) {
24 JSONObject jsonObject = (JSONObject) json;
25 System.out.println(jsonObject);
26 //自行解析即可
27 } else if (json instanceof JSONArray) {
28 JSONArray jsonArray = (JSONArray) json;
29 System.out.println(jsonArray);
30 //自行解析即可
31 }
32 }
33
34 /**
35 * 单层的orgJson判断是否是JSONObject还是JSONArray.
36 */
37 public static void simpleJSONArrayOrgJson() {
38 String message = "{\r\n" + " \"DataSource\": \"''P33''\",\r\n"
39 + " \"DataStamp\": \"''2018-08-25''\",\r\n" + " \"GovScCode\": \"''aaa''\",\r\n"
40 + " \"OperEffDate\": \"''2018-05-02''\",\r\n" + " \"OrgCode\": \"''ww''\",\r\n"
41 + " \"OrgDesc\": \"''ss''\",\r\n" + " \"OrgId\": \"1\",\r\n"
42 + " \"OrgName\": \"''11111''\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
43 + " \"OrgShortName\": \"''ss''\",\r\n" + " \"OrgStatus\": \"''ss''\",\r\n"
44 + " \"OrgType\": \"''ss''\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
45 + " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
46 + " }";
47 Object json = new JSONTokener(message).nextValue();
48 if (json instanceof JSONObject) {
49 JSONObject jsonObject = (JSONObject) json;
50 System.out.println(jsonObject);
51 //自行解析即可
52 } else if (json instanceof JSONArray) {
53 JSONArray jsonArray = (JSONArray) json;
54 System.out.println(jsonArray);
55 //自行解析即可
56 }
57 }
58
59 /**
60 * JSON官方
61 */
62 public static void doubleOrgJson() {
63 // Json字符串
64 /*
65 * String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n" +
66 * " \"tableName\": \"core_data.uc_gov_org\",\r\n" +
67 * " \"type\": \"POST\",\r\n" + " \"condition\": \"null\",\r\n" +
68 * " \"data\": {\r\n" + " \"DataSource\": \"''P33''\",\r\n" +
69 * " \"DataStamp\": \"''2018-08-25''\",\r\n" +
70 * " \"GovScCode\": \"''aaa''\",\r\n" +
71 * " \"OperEffDate\": \"''2018-05-02''\",\r\n" +
72 * " \"OrgCode\": \"''ww''\",\r\n" + " \"OrgDesc\": \"''ss''\",\r\n" +
73 * " \"OrgId\": \"1\",\r\n" + " \"OrgName\": \"''11111''\",\r\n" +
74 * " \"OrgSeq\": \"11\",\r\n" + " \"OrgShortName\": \"''ss''\",\r\n"
75 * + " \"OrgStatus\": \"''ss''\",\r\n" + " \"OrgType\": \"''ss''\",\r\n"
76 * + " \"ParentOrgId\": \"0\",\r\n" +
77 * " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" +
78 * " \"RegionId\": \"1\"\r\n" + " }\r\n" + "}";
79 */
80
81 String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
82 + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
83 + " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"''P33''\",\r\n"
84 + " \"DataStamp\": \"''2018-08-25''\",\r\n" + " \"GovScCode\": \"''aaa''\",\r\n"
85 + " \"OperEffDate\": \"''2018-05-02''\",\r\n" + " \"OrgCode\": \"''ww''\",\r\n"
86 + " \"OrgDesc\": \"''ss''\",\r\n" + " \"OrgId\": \"1\",\r\n"
87 + " \"OrgName\": \"''11111''\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
88 + " \"OrgShortName\": \"''ss''\",\r\n" + " \"OrgStatus\": \"''ss''\",\r\n"
89 + " \"OrgType\": \"''ss''\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
90 + " \"RegAddress\": \"''ww''\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
91 + " }]\r\n" + "}";
92 // 解析第一层{}
93 JSONObject jsonObject = new JSONObject(message);
94 String catalogId = jsonObject.getString("catalogId");
95 String schemaTableName = jsonObject.getString("tableName");
96 String type = jsonObject.getString("type");
97 String condition = jsonObject.getString("condition");
98 System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
99 + ", condition:" + condition + "}");
100
101 // 解析第二层,如果自己已经明确第二层是[]是JSONArray类型的,如下解析即可
102 JSONArray jsonArray2 = jsonObject.getJSONArray("data");
103 // 解析第二层,如果自己已经明确第二层是{}是JSONObject类型的,如下解析即可
104 // JSONObject jsonObject2 = jsonObject.getJSONObject("data");
105
106
107 for (int i = 0; i < jsonArray2.length(); i++) {
108 JSONObject jsonArrayObject = (JSONObject) jsonArray2.get(i);
109 String DataSource = jsonArrayObject.getString("DataSource");
110 String DataStamp = jsonArrayObject.getString("DataStamp");
111 String OrgName = jsonArrayObject.getString("OrgName");
112 String RegAddress = jsonArrayObject.getString("RegAddress");
113 // ...等等字段
114 System.out.println("{DataSource: " + DataSource + ", DataStamp: " + DataStamp + ", OrgName: " + OrgName
115 + ", RegAddress: " + RegAddress + "}");
116 }
117 }
118
119 public static void main(String[] args) {
120 doubleOrgJson();
121 // simpleJSONObjectOrgJson();
122 // simpleJSONArrayOrgJson();
123 }
124
125 }
GSON和jackson,我还未接触过,这里就不叙述了,百度也有很多教程。
待续.....
我们今天的关于JsonObject和JsonArray的区别和jsonobject和map的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android中的JSONObject和JSONArray解析json数据、Android中的JSONObject和JSONArray解析json数据_PHP教程、Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断、fastjson如何判断JSONObject和JSONArray的相关信息,请在本站查询。
本文标签: