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.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文件依赖:


  com.jayway.jsonpath
  json-path
  2.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块。

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

浅谈在Java中JSON的多种使用方式的更多相关文章

  1. Java-web易混淆知识点整理

    Java-web易混淆知识点:post和get区别,相对路径和绝对路径,重定向和请求转发区别,Cookie和session的区别,jsp内置对象和EL内置对象的区别与联系,四大域对象的区别,活化与钝化,jsp九大内置对象,EL内置对象Java-web易混淆知识点 post和get区别post:数据不......

  2. Java 容器系列总结

    为什么要使用集合当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。数组的缺点是一旦声明之后,长度就不可变了;同时,声......

  3. Java中ArrayList集合的常用方法大全

    ArrayList集合的创建非泛型创建ArrayList集合对象,可以添加任意Object子类元素至集合//非泛型创建的ArrayList集合对象可以保存任何类型的值ArrayList list = new ArrayList();list.add("str");//存入Stri......

  4. Java 概述

    1. 什么是Java什么是 JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的......

  5. java中DelayQueue实例用法详解

    在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。这里的删除需要一定的时间才能生效,有点类似于过期处理的理念。下面我们就DelayQueue的概念、特点进行讲解,然后在代码示例中体会DelayQueue的使用。1.概念是一个带有延迟时间......

  6. java中DelayQueue实例用法详解

    在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。这里的删除需要一定的时间才能生效,有点类似于过期处理的理念。下面我们就DelayQueue的概念、特点进行讲解,然后在代码示例中体会DelayQueue的使用。1.概念是一个带有延迟时间......

  7. Java高并发BlockingQueue重要的实现类详解

    ArrayBlockingQueue有界的阻塞队列,内部是一个数组,有边界的意思是:容量是有限的,必须进行初始化,指定它的容量大小,以先进先出的方式存储数据,最新插入的在对尾,最先移除的对象在头部。public class ArrayBlockingQueue extends AbstractQue......

  8. JVM必不可少的知识

    1.Java垃圾回收机制对象被判断为垃圾的标准:没有被其他对象引用2.判断对象是否可被回收(1)引用计数算法判断对象的引用数量通过判断对象的引用数量来决定对象是否可以被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1任何引用计数为0的对象实例可以被当作垃圾回收优点:执行效率高,程序执......

  9. java中日期格式化的大坑

    前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗?yyyy 和 YYYY示例代码@Testpublic void testWeekBasedYear() {Calendar calendar = C......

  10. Java中判断字符串是否相等的实现

    在最近的开发中,我踩到一个坑,过程是这样的。我需要在Java中判断两个字符串是否相等,按照以往的经历使用 == 双等号的操作符来判断,但是在Java中,这样写却没有实现我想要的效果。经过查阅资料后,把得到的经验分享给大家。相等判断操作符==Java中,==相等判断符用于判断基本数据类型和引用数据类型......

随机推荐

  1. Linux下使用timedatectl命令时间时区操作详解

    timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。timedatectl命令可以查询和更改系统时钟和设......

  2. 使用Python访问并下载网页内容的代码

    [Python]代码#!/usr/local/bin/python3.2import urllib.request,io,os,sysreq = urllib.request.Request("http://www.google.com")f = urllib.request.u......

  3. 关于Vue v-model你需要知道的一切

    v-model是Vue的一个指令,它提供了input和form数据之间或两个组件之间的双向数据绑定。这在Vue开发中是一个简单的概念,但是v-model的真正威力需要一些时间才能理解。到本教程结束时,你将了解v-model的所有不同用例,并学习如何在自己的项目中使用它。准备好了吗?我也是。让我们编写......

  4. typescript编写微信小程序创建项目的方法

    创建项目在微信开发者工具创建项目,在语言中选择 TypeScript改造项目编辑 package.json 文件,修改 miniprogram-api-typings 和 typescript 版本{"name": "miniprogram-ts-quickstart&......

  5. .NET并发编程-函数式编程

    本系列学习在.NET中的并发并行编程模式,实战技巧函数式编程和面向过程编程POP(procedure oriented Programming)面向对象编程OOP(object oriented programming)一样也是一种编程思维。函数式编程FP(functional programmin......

  6. js加减乘除精确运算方法实例代码

    前言因为计算机数字是浮点型,所以在计算过程中通常得到的并不是一个准确的数据,所以在做一些数组运算的时候比较头疼,我们这里就来写一下精确运算的方法首先是加法 (这里以两个数据相加为例)function add(arg1, arg2) {arg1 = arg1.toString(), arg2 = ar......

  7. MyBatis中的表关联查询实现示例

    Mybatis中的一对多对象关联查询查询模拟情景,商品与商品详情:一件商品可以对应多个商品详情信息,即从商品?商品详情方向看,属于一对多。 在一对多关系中,需要在属于一的一方的实体类中添加多的一方的集合,一般为List<>类型//(省去了get和set的方法)public class G......

  8. 在PHP中灵活使用foreach+list处理多维数组的方法

    先抛出问题,有时候我们接收到的参数是多维数组,我们需要将他们转成普通的数组,比如: $arr = [ [1, 2, [3, 4]], [5, 6, [7, 8]],]; 我们需要的结果是元素1变成1,2,3,4,元素2变成5,6,7,8,这时候,我们就可以用foreach配合list来实......

  9. C# 两个类的实例之间相同属性的值的复制

    在进行实体转换操作的时候通常需要在对两个实体之间两个属性字段相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,并且还容易漏掉一些,这个时候可以利用c#的反射来实现复制。1.适用于创建实体的时候从一个......

  10. python实现经典排序算法

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想。冒泡排序内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后会将次大的元素移到最大元素的左边,每次内层循环结束都会将一个元素排好序。def bubble_sort(......