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,我还未接触过,这里就不叙述了,百度也有很多教程。

待续.....

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hbbliyong

LINQ分页和排序,skip和Take 用法

LINQ分页和排序,skip和Take 用法 dbconn.BidRecord.OrderBy(p=>p.bid_id).ToList<BidRecord>()...

3919
来自专栏lgp20151222

drool-6.5的自学demo

1422
来自专栏C# 编程

C# 基于泛型的自定义线性节点链表集合示例

本例子实现了如何自定义线性节点集合,具体代码如下: using System; using System.Collections; using System.C...

2210
来自专栏技术之路

动态生成TreeView方法(二)

这次是用递归的方法实现 ,我想大家都知道怎么做吧,就不 多说了, 还是不建议用递归,数据量大了会映响速度,动态生成TreeView方法(一)是我比较喜欢的方法 ...

26510
来自专栏大内老A

深入理解C# 3.x的新特性(1): Anonymous Type

在C#3.0中,引入了一个新的Feature:Anonymous Method,允许我们已Inline的方式来定义Delegate,为Developer在Cod...

3968
来自专栏大内老A

难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?

开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)...

3987
来自专栏c#开发者

asp.net回调javascript

using System; using System.Collections; using System.IO; using System.Text; ...

3305
来自专栏菩提树下的杨过

几种常见复合sql查询语句的linq写法[继续补充中]

1.IN 语句 尝试了很多次,好象linq死活不生成in语句,无奈只能做了下变换 例,要找出"手机大类"以及"手机下属所有子类"的产品 (手机大类的ID为D0...

2466
来自专栏技术之路

动态生成TreeView方法(一)

一般情况下生成TreeView我们用的是用递归不建议用递归数据量大了会慢, 小弟今天用SortedList集合实现一下没有技术含量,一看代码大家就会明白。个人也...

1886
来自专栏hbbliyong

.Net下SQLite的DBHelp

怎样获取SqLite请参考初识SqlLite ---.net连接数据库,怎样在SQLite使用Linq请参考在C#中利用Nuget包使用SQLite数据库和Li...

3244

扫码关注云+社区

领取腾讯云代金券