1、fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法。这里用一个还算可以的方法,算是实现了这个效果。

网上贴代码,有时候不把引入的包贴上去,自己使用的话还真不知道是导入那个包咧。

maven依赖的如下所示:

 <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.</version>
</dependency>

实现代码如下所示:

例子主要实现的是解析第一层,然后解析第二层,解析第二层的时候判断是否是JSONArray还是JSONObject类型的。最后我是直接输出的,你肯定是将解析出的信息进行其他操作,这里不做叙述了。

 package com.fline.aic.utils;

 import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; public class FastJosnUtils { /**
* FastJSON
*/
public static void fastJson() {
// 1、Json字符串,JSONObject类型的
// String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
// + " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
// + " \"condition\": \"null\",\r\n" + " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n"
// + " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
// + " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
// + " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
// + " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
// + " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
// + " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
// + " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
// + " }\r\n" + "}"; // 1、Json字符串,JSONArray类型的
String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
+ " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
+ " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " },{\r\n" +
" \"DataSource\": \"'P33'\",\r\n" +
" \"DataStamp\": \"'2018-08-25'\",\r\n" +
" \"GovScCode\": \"'aaa'\",\r\n" +
" \"OperEffDate\": \"'2018-05-02'\",\r\n" +
" \"OrgCode\": \"'ww'\",\r\n" +
" \"OrgDesc\": \"'ss'\",\r\n" +
" \"OrgId\": \"1\",\r\n" +
" \"OrgName\": \"'11111'\",\r\n" +
" \"OrgSeq\": \"11\",\r\n" +
" \"OrgShortName\": \"'ss'\",\r\n" +
" \"OrgStatus\": \"'ss'\",\r\n" +
" \"OrgType\": \"'ss'\",\r\n" +
" \"ParentOrgId\": \"0\",\r\n" +
" \"RegAddress\": \"'ww'\",\r\n" +
" \"RegDate\": \"\",\r\n" +
" \"RegionId\": \"1\"\r\n" +
" }]\r\n" + "}";
// 解析第一层{},由于多种json写到了一起,所以直接引用到了包,自行开发引用自己的Json包就行。
JSONObject jsonObject = JSONObject.parseObject(message);
String catalogId = jsonObject.getString("catalogId");
String schemaTableName = jsonObject.getString("tableName");
String type = jsonObject.getString("type");
String condition = jsonObject.getString("condition");
System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
+ ", condition:" + condition + "}"); // 解析第二层,如果根据需求可以判断是否是JSONObject还是JSONArray
JSONArray jsonArray = new JSONArray();
JSONObject jsonData = new JSONObject();
String data = jsonObject.getString("data");
//百度了很对,也没有找到合适的,我是这样判断的是否是JSONArray还是JSONObject
if (data.contains("[") && data.contains("]")) {
jsonArray = JSONArray.parseArray(data);
System.out.println("jsonArray: " + jsonArray);
//然后可以解析第二层
for(int i=;i< jsonArray.size();i++) {
JSONObject jsonArrayObject = (JSONObject) jsonArray.get(i);
String DataSource = jsonArrayObject.getString("DataSource");
String DataStamp = jsonArrayObject.getString("DataStamp");
String OrgName = jsonArrayObject.getString("OrgName");
String RegAddress = jsonArrayObject.getString("RegAddress");
//...等等字段
System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
} } else {
jsonData = JSONObject.parseObject(data);
System.out.println("jsonData: " + jsonData);
//然后可以解析第二层
String DataSource = jsonData.getString("DataSource");
String DataStamp = jsonData.getString("DataStamp");
String OrgName = jsonData.getString("OrgName");
String RegAddress = jsonData.getString("RegAddress");
//...等等字段
System.out.println("{DataSource: "+DataSource +", DataStamp: " + DataStamp + ", OrgName: " +OrgName +", RegAddress: " + RegAddress);
}
} public static void main(String[] args) {
fastJson(); }
}

2、JSON官方的判断json字符串是JSONArray还是JSONObject类型的。是这个样子搞得,百度一下,教程还是很多的。这里也简单贴一下。

 <!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version></version>
</dependency>

案例代码如下所示:

 package com.fline.aic.utils;

 import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener; public class OrgJsonUtils { /**
* 单层的orgJson判断是否是JSONObject还是JSONArray.
*/
public static void simpleJSONObjectOrgJson() {
String message = "[{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }]";
Object json = new JSONTokener(message).nextValue();
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
System.out.println(jsonObject);
//自行解析即可
} else if (json instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) json;
System.out.println(jsonArray);
//自行解析即可
}
} /**
* 单层的orgJson判断是否是JSONObject还是JSONArray.
*/
public static void simpleJSONArrayOrgJson() {
String message = "{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }";
Object json = new JSONTokener(message).nextValue();
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
System.out.println(jsonObject);
//自行解析即可
} else if (json instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) json;
System.out.println(jsonArray);
//自行解析即可
}
} /**
* JSON官方
*/
public static void doubleOrgJson() {
// Json字符串
/*
* String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n" +
* " \"tableName\": \"core_data.uc_gov_org\",\r\n" +
* " \"type\": \"POST\",\r\n" + " \"condition\": \"null\",\r\n" +
* " \"data\": {\r\n" + " \"DataSource\": \"'P33'\",\r\n" +
* " \"DataStamp\": \"'2018-08-25'\",\r\n" +
* " \"GovScCode\": \"'aaa'\",\r\n" +
* " \"OperEffDate\": \"'2018-05-02'\",\r\n" +
* " \"OrgCode\": \"'ww'\",\r\n" + " \"OrgDesc\": \"'ss'\",\r\n" +
* " \"OrgId\": \"1\",\r\n" + " \"OrgName\": \"'11111'\",\r\n" +
* " \"OrgSeq\": \"11\",\r\n" + " \"OrgShortName\": \"'ss'\",\r\n"
* + " \"OrgStatus\": \"'ss'\",\r\n" + " \"OrgType\": \"'ss'\",\r\n"
* + " \"ParentOrgId\": \"0\",\r\n" +
* " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" +
* " \"RegionId\": \"1\"\r\n" + " }\r\n" + "}";
*/ String message = "{\r\n" + " \"catalogId\": \"IJ1009\",\r\n"
+ " \"tableName\": \"core_data.uc_gov_org\",\r\n" + " \"type\": \"POST\",\r\n"
+ " \"condition\": \"null\",\r\n" + " \"data\": [{\r\n" + " \"DataSource\": \"'P33'\",\r\n"
+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"
+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"
+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"
+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"
+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"
+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"
+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"
+ " }]\r\n" + "}";
// 解析第一层{}
JSONObject jsonObject = new JSONObject(message);
String catalogId = jsonObject.getString("catalogId");
String schemaTableName = jsonObject.getString("tableName");
String type = jsonObject.getString("type");
String condition = jsonObject.getString("condition");
System.out.println("{catalogId :" + catalogId + ", schemaTableName: " + schemaTableName + ", type: " + type
+ ", condition:" + condition + "}"); // 解析第二层,如果自己已经明确第二层是[]是JSONArray类型的,如下解析即可
JSONArray jsonArray2 = jsonObject.getJSONArray("data");
// 解析第二层,如果自己已经明确第二层是{}是JSONObject类型的,如下解析即可
// JSONObject jsonObject2 = jsonObject.getJSONObject("data"); for (int i = ; i < jsonArray2.length(); i++) {
JSONObject jsonArrayObject = (JSONObject) jsonArray2.get(i);
String DataSource = jsonArrayObject.getString("DataSource");
String DataStamp = jsonArrayObject.getString("DataStamp");
String OrgName = jsonArrayObject.getString("OrgName");
String RegAddress = jsonArrayObject.getString("RegAddress");
// ...等等字段
System.out.println("{DataSource: " + DataSource + ", DataStamp: " + DataStamp + ", OrgName: " + OrgName
+ ", RegAddress: " + RegAddress + "}");
}
} public static void main(String[] args) {
doubleOrgJson();
// simpleJSONObjectOrgJson();
// simpleJSONArrayOrgJson();
} }

GSON和jackson,我还未接触过,这里就不叙述了,百度也有很多教程。

待续.....

fastjson如何判断JSONObject和JSONArray的更多相关文章

  1. java判断jsonObject和jsonArray是否为空

    resJsonObj = {"res":"0","msg":"","data":{"Nam ...

  2. Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断

    1.Fastjson 我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢? try{ Object object = JSON.parse(a); ...

  3. fastjson之JSONObject、JSONArray

    JSONObject,JSONArray是JSON的两个子类. 首先我们来看JSONObject源码: 会发现JSONObject是继承Map<String, Object>,并且都是使用 ...

  4. Java学习-030-JSON 之四 -- 判断 JSONObject 是否包含键值对

    前文对获取 JSON 数据封装方法,使之可通过类似于 cssSelector 的方法获取 JSON 数据,使获取数据变得简单.敬请参阅:模仿 cssSelector 封装读取 JSON 数据方法. 在 ...

  5. Gson基本操作,JsonObject,JsonArray,String,JavaBean,List互转

    (转自)https://www.cnblogs.com/robbinluobo/p/7217387.html String.JsonObject.JavaBean 互相转换 User user = n ...

  6. JSONObject 和 JSONArray 的区别和用法

    JSONObject 和 JSONArray 的数据表现形式不同: JSONObject的数据是用 {  } 来表示的,例如: { "id" : "1", &q ...

  7. 011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List<Map<String,String>>的8种方法

    一.JSON数据格式 1.1.常用JSON数据格式 1.对象方式:JSONObject的数据是用 { } 来表示的, 例如: { "id" : "123", & ...

  8. JsonObject、JsonArray操作json的个人总结

    介绍 JsonObject.JsonArray之前,先介绍下JsonConfig JsonConfig: setClassMap(Map classMap)设置json属性类型,上json里的其中值为 ...

  9. json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

    我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容 ...

随机推荐

  1. C++ Template 编程,泛型编程练习

    #include <iostream> #include <string> #include <deque> #include <stdexcept> ...

  2. AIX系统下sed的用法与实例——查询/打印/替换字符串并生成文件/删除

    sed是AIX中非常重要的文本流编辑器,它对输入的文本进行查询/打印/替换/删除等操作,并将结果写到标准输出.sed 命令包含很多功能,用于选择要修改的行,并只对选择的行作更改. 首先,使用sed命令 ...

  3. 【转】gcc中的-w -W和-Wall选项

    -w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的. -Wall选项意思是编译后显示所有警告. ...

  4. hibernate框架学习之主键生成策略generator

    1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) n ...

  5. 浅谈2017noip信息奥赛普及组试题

    [话前叨叨] 一些日常刷题策略(转载): PS:本题的题目信息来自洛谷平台 下面就是进入正题了(其实这也是我第一次在csdn写博客,所以写的不好的地方也请大家多多谅解和提点/微笑/) 一.score ...

  6. java对图片进行透明化处理

    package utils; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; ...

  7. centos7怎么永久修改hosname

    centos7怎么永久修改hosname 其实,一般来说安装好虚拟机之后,一般都会进行修改hostname,之前也是在修改的时候,遇到过问题,但是没有深究,今天在修改的时候,好好研究了一下,之前看到好 ...

  8. FreeSWITCH黑名单功能设置

    功能描述:对呼叫的号码进行过滤 步骤: 1.编译mod_blacklist 模块:进入源目录/usr/local/src/freeswitch  --> make mod_blacklist-i ...

  9. JS实现多语言方式

    应用场景: 在不同移动平台(IOS,Android)上,建立一套与HTML页面通讯框架:主要业务逻辑使用HTML开发:想支持多语言开发. 动机: 通过主动发消息的方式,在页面完成初始化前,获取当前语言 ...

  10. 响应式页面-@media介绍

    01 响应式页面-@media介绍,   我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话 ...