浅谈在Java中JSON的多种使用方式

这篇文章主要介绍了浅谈在Java中JSON的多种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 常用的JSON转换

 JSONObject 转 JSON 字符串

JSONObject json = new JSONObject(); jsonObject.put("name", "test"); String str = JSONObject.toJSONString(json);

JSON字符串转JSON

String str = "{"name":"test"}"; JSONObject json = JSONObject.parSEObject(str);

实体类转JSON

Test test = new test(); test.setName("test"); String testStr = JSONObject.toJSONString(test); JSONObject json = JSONObject.parSEObject(testStr);

Map转JSON

JSONObject json = JSONObject.parSEObject(JSON.toJSONString(map));

JSON转Map

Map jsonToMap = JSONObject.parSEObject(jsonObject.toJSONString());

2. 将多个JSON合并一个

JSONObject totalJSON = new JSONObject(); totalJSON.putAll(json1); totalJSON.putAll(json2);

json1,json2 为JSONObject。 最终的代码格式:

{ json1:{}, json2:{} }

3.JSON拆分

不同的需求有不同的做法,以下提供两种解决思路

定义两个或多个JSON进行put和remove 比如明确需要哪些字段的时候可以定义一个数组用来存放key信息。存放和删除的时候只需要遍历数组就可以。

遍历JSON,获取key,value再重新put

4.JSON遍历

定义一个工具类,获取key和value

if(object instanceof JSONObject) { JSONObject jsonObject = (JSONObject) object; for (Map.Entry entry: jsonObject.entrySet()) { Object o = entry.getValue(); if(o instanceof String) { System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue()); } else { jsonLoop(o); } } } if(object instanceof JSONArray) { JSONArray jsonArray = (JSONArray) object; for(int i = 0; i

JSONArray遍历的方式有很多种

for

for(int i = 0; i

foreach

jsonArray.forEach(o -> { if (o instanceof JSONObject) { JSONObject json = (JSONObject) o; }

Iterator

JSONObject jsonObject = new JSONObject(jsonString); Iterator iterator = jsonObject.keys(); while(iterator.hasNext()){ key = (String) iterator.next(); value = jsonObject.getString(key); }

5.JSONPath

另外向大家推荐一个非常好用的工具:JSONPath。

JSONPath是一种简单的方法提取给定JSON的部分内容,使用方式类似于正则表达式。 GitHub地址: https://github.com/json-path/JsonPath

简单描述下使用方法已经自己使用的案例 pom文件依赖:

com.jayway.jsonpathjson-path2.2.0

JsonPath表达式总是以与XPath表达式结合使用XML文档相同的方式引用JSON结构。

JsonPath中的“根成员对象”始终称为$,无论是对象还是数组。

JsonPath表达式可以使用点表示法。

这里有个表格,说明JSONPath语法元素和对应XPath元素的对比。

官方案例:

 

 

详细大家还是参照官方解说。 下面是我写的案例:

JSONArray jsonArray = JSONPath.read("$.ePrint.common..label");

需要注意的是这里的JSONArray是JSONPath的,所以导包是:net.minidev.json.JSONPath JSON格式不会变,所以可以转换为alibaba的JSONArray:

com.alibaba.fastjson.JSONArray jsonArr = JSON.parse(jsonArray.toString());

这里要注意一点也是我踩过的坑:如果获取一个JSONObject下有多个同名的JSONArray,那么返回的[]也是多个。要先遍历获取到的数据,在取其中的一个JSON块。

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...