1.Fastjson

我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢?

try{

Object object=JSON.parse(a);if (object instanceofJSONObject){//JSONObject

}if (object instanceofJSONArray){//JSONArray

}

}catch(com.alibaba.fastjson.JSONException e){//非JSON字符串

}

2.org.json.JSON

直接使用JSON库做解析的情况不多,但是这里也稍微写一下

log.info(JSON.parse(jsonStr).getClass().getName());try{

Object json= newJSONTokener(jsonStr).nextValue();

log.info( json.getClass().toString());//json.toString();

if(json instanceofJSONObject){

log.info("is JSONObject");

JSONObject jsonObject=(JSONObject)json;//further actions on jsonObjects//...

}else if (json instanceofJSONArray){

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= newJsonParser();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 判断是否包含_Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断相关推荐

  1. android 读取json数据(遍历JSONObject和JSONArray)

    android 读取json数据(遍历JSONObject和JSONArray) public String getJson(){ String jsonString = "{\" ...

  2. fastjson 判断是否包含_Fastjson爆出重大漏洞,攻击者可使整个业务瘫痪

    360网络安全响应中心 https://cert.360.cn/warning/detail?id=82a509e4543433625d6fe4361b5802c9 报告编号:B6-2019-0905 ...

  3. fastjson转list嵌套_FastJson的学习之JSON互相转Map集合,List集合,JavaBean

    https://blog.csdn.net/weixin_36910300/article/details/79182120 创建两个实体类 一个是部门类,一个是部门员工类 部门员工类 public ...

  4. Json格式的解析,JsonObject、JSONArray

    1.将json字符串转成json格式 com.alibaba.fastjson.JSONObject object = JSONArray.parseObject(newJson); 2.根据属性获取 ...

  5. excel判断字符串包含另一个字符串_【前端冷知识】如何正确判断一个字符串是数值?...

    在网页中,我们从用户输入的内容中获取的值通常是字符串,但是有时候我们希望用户输入的内容一定要能转成数值: <input id="userInput"> userInpu ...

  6. JSON对象中的JSONObject和JSONArray以及与Map、String、数组的转化

    引用自:http://blog.csdn.net/bestcxx/article/details/50595464 String list array 转化为 json,利用的包如下: commons ...

  7. java怎么判断json是否为空_java判断jsonObject和jsonArray是否为空

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

  8. fastjson解析多层数据_fastJson解析多层Json数据案例

    这里咱们来实现一个获取接口数据存入数据库的案例html 例如数据:java {   "code":200,   "msg":"ok",   ...

  9. jsonpath 判断是否包含_mysql json 判断某个key是否存在

    我们知道mysql5.7开始就支持json字段的类型,很多时候用字段类型存数据会非常的方便. 今天我们探讨就是mysql跟json字段类型有关的查询,判断key是否存在. mysql提供了大量的处理j ...

最新文章

  1. 查看当前svn账户_SVN-基础教程学习
  2. python 递归遍历二叉树
  3. stmmac描述符的结构和初始化
  4. 【JAVA基础篇】对象初始化过程
  5. 2021年95后“他经济”研究报告
  6. Python解析pdf转为TXT格式
  7. PHP7实战开发简单CMS内容管理系统(11)批量删除栏目数据
  8. fpga供电电压偏低会怎样_正点原子【FPGA-开拓者】第三章 硬件资源详解
  9. 中去掉外键_【Java笔记】035天,MySQL中的增删改查
  10. Android开源框架ViewPageIndicator和ViewPager实现Tab导航
  11. excel下拉列表多选框_将列表框添加到Excel工作表
  12. cad怎么把图层英文变成中文_cad图层英文
  13. 什么是javabean及其用法(转)
  14. js 多线程Worker
  15. linux串行提交脚本,如何保证shell脚本串行执行
  16. HbuilderX 快捷键修改
  17. python使用matplotlib画折线图(详细)
  18. 全国计算机职称考试excel2003,全国计算机职称考试excel2003题库及答案.pdf
  19. Uefi ABL读取XBL设置的标志位
  20. Linux系统之CentOS和Ubuntu的对比

热门文章

  1. 新手该学习Python2.x版本还是3.x版本
  2. Eclipse插件Ant里运用ftp遇到的问题
  3. Oracle教程之管理索引(一)--Oracle管理索引
  4. jquery 处理json字符串
  5. windows NFS 配置
  6. Go 单元测试从 0 到 1
  7. SP104 Highways (矩阵树,高斯消元)
  8. webapp检测手机运动方向,可实现手机摇一摇功能的触发
  9. 小程序外链跳转web-view系列问题
  10. 小程序 - 首次使用