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

 更新时间:2021年01月18日 08:53:48   作者:LeeShaoQing  
这篇文章主要介绍了浅谈在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<String, Object> 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.size(); i ++) {
    jsonLoop(jsonArray.get(i));
  }
}

JSONArray遍历的方式有很多种

for

for(int i = 0; i < jsonArray.size(); i++){
	JSONObject json = jsonArray.getJSONObject(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文件依赖:

<dependency>
  <groupId>com.jayway.jsonpath</groupId>
  <artifactId>json-path</artifactId>
  <version>2.2.0</version>
</dependency>

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块。

到此这篇关于浅谈在Java中JSON的多种使用方式的文章就介绍到这了,更多相关Java中JSON使用方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java网络编程之TCP通信完整代码示例

    Java网络编程之TCP通信完整代码示例

    这篇文章主要介绍了Java网络编程之TCP通信完整代码示例,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • 如何使用Java redis实现发送手机验证码功能

    如何使用Java redis实现发送手机验证码功能

    这篇文章主要介绍了如何使用Java redis实现发送手机验证码功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Maven多模块工程Module开发(图文教程)

    Maven多模块工程Module开发(图文教程)

    这篇文章主要介绍了Maven多模块工程Module开发(图文教程),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 详解Thymeleaf的三种循环遍历方式

    详解Thymeleaf的三种循环遍历方式

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。本文为大家总结了Thymeleaf的三种循环遍历方式,感兴趣的可以跟随小编一起学习一下
    2022-06-06
  • Java字节码中jvm实例用法

    Java字节码中jvm实例用法

    在本篇文章里小编给大家整理的是一篇关于Java字节码中jvm实例用法内容,有兴趣的朋友们可以学习参考下。
    2021-02-02
  • java实现fibonacci数列学习示例分享(斐波那契数列)

    java实现fibonacci数列学习示例分享(斐波那契数列)

    这篇文章主要介绍了fibonacci数列(斐波那契数列)示例,大家参考使用吧
    2014-01-01
  • spring中WebClient如何设置连接超时时间以及读取超时时间

    spring中WebClient如何设置连接超时时间以及读取超时时间

    这篇文章主要给大家介绍了关于spring中WebClient如何设置连接超时时间以及读取超时时间的相关资料,WebClient是Spring框架5.0引入的基于响应式编程模型的HTTP客户端,它提供一种简便的方式来处理HTTP请求和响应,需要的朋友可以参考下
    2024-08-08
  • SpringBoot+MyBatis-Plus实现数据库读写分离的代码示例

    SpringBoot+MyBatis-Plus实现数据库读写分离的代码示例

    在当今互联网应用中,数据库读写分离是提高系统性能和稳定性的重要手段之一,通过将读操作和写操作分别路由到不同的数据库节点,可以有效减轻数据库服务器的负担,本文将介绍如何利用SpringBoot和MyBatis-Plus框架实现数据库读写分离,需要的朋友可以参考下
    2023-11-11
  • 解决因jdk版本引起的TypeNotPresentExceptionProxy异常

    解决因jdk版本引起的TypeNotPresentExceptionProxy异常

    这篇文章介绍了解决因jdk版本引起的TypeNotPresentExceptionProxy异常的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • spring boot 实现Minio分片上传的步骤

    spring boot 实现Minio分片上传的步骤

    分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件,本文给大家介绍spring boot 实现Minio分片上传的步骤,感兴趣的朋友跟随小编一起看看吧
    2023-10-10

最新评论