java循环遍历无规则json的方式:gson、fastjson、orgjson

 更新时间:2024年08月08日 09:17:53   作者:qq_41771339  
这篇文章主要介绍了java循环遍历无规则json的方式:gson、fastjson、orgjson,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

引入依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.83</version>
</dependency>
 
<dependency>
	<groupId>org.json</groupId>
	<artifactId>json</artifactId>
	<version>20200518</version>
</dependency>
 
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.6</version>
</dependency>

使用gson遍历

private static testJson = "";
 
private static Map<String, Object> pathMap = new HashMap<>();
 
//通过gson遍历所有参数
public static void getJsonMapByGson() {
	Gson gson = new Gson();
	JsonObject jsonObject = gson.fromJson(testJson, JsonObject.class);
	System.out.println(jsonObject);
	analysisJson("/", jsonObject);
	for (Map.Entry entry : pathMap.entrySet()) {
		System.out.println(entry);
	}
}
 
//递归解析Json、获取所有键值对
public static void analysisJson(String pathPre, JsonObject jsonObject) {
	for (String key : jsonObject.keySet()) {
		JsonElement value = jsonObject.get(key);
		if (value.isJsonPrimitive()) {
			if (value.getAsJsonPrimitive().isString()) {		//此处只取了字符串
				pathMap.put(pathPre + key, value.getAsString());
			}
		} else if (value.isJsonObject()) {
			JsonObject objectValue = value.getAsJsonObject();
			analysisJson(pathPre + key, objectValue);
		} else if (value.isJsonArray()) {
			JsonArray jsonArray = value.getAsJsonArray();
			for (int i = 0; i < jsonArray.size(); i++) {
				JsonObject tempJson = new JsonObject();
				tempJson.add(i + "", jsonArray.get(i));
				analysisJson(pathPre + key, tempJson);
			}
		}
	}
}

使用fastjson遍历

private static testJson = "";
 
private static Map<String, Object> pathMap = new HashMap<>();
 
//通过fastjson遍历所有参数
public static void getJsonMapByFastjson() {
	JSONObject jsonObject = JSONObject.parseObject(testJson);
	System.out.println(jsonObject);
	analysisJson("/", jsonObject);
	for (Map.Entry entry : pathMap.entrySet()) {
		System.out.println(entry);
	}
}
 
//递归解析Json、获取所有键值对
public static void analysisJson(String pathPre, JSONObject jsonObject) {
	Set<String> set = jsonObject.keySet();
	Iterator it = set.iterator();
	while (it.hasNext()) {
		String key = it.next().toString();
		Object value = jsonObject.get(key);
		if (value instanceof String || value instanceof Integer || value instanceof Float || value instanceof Double) {
			pathMap.put(pathPre + key, value);
		} else if (value instanceof JSONObject) {
			analysisJson(pathPre + key + "/", (JSONObject) value);
		} else if (value instanceof JSONArray) {
			JSONArray jsonArray = (JSONArray) value;
			for (int i = 0; i < jsonArray.size(); i++) {
				JSONObject tempJson = new JSONObject();
				tempJson.put(i + "", jsonArray.get(i));
				analysisJson(pathPre + key + "/", tempJson);
			}
		}
	}
}

使用orgjson遍历

private static testJson = "";
 
private static Map<String, Object> pathMap = new HashMap<>();
 
//通过org.json遍历所有参数
public static void getJsonMapByOrgjson() {
	JSONObject jsonObject = new JSONObject(testJson);
	System.out.println(jsonObject);
	analysisJson("/", jsonObject);
	for (Map.Entry entry : pathMap.entrySet()) {
		System.out.println(entry);
	}
}
 
//递归解析Json、获取所有键值对
public static void analysisJson(String pathPre, JSONObject jsonObject) {
	Set<String> set = jsonObject.keySet();
	Iterator it = set.iterator();
	while (it.hasNext()) {
		String key = it.next().toString();
		Object value = jsonObject.get(key);
		if (value instanceof String || value instanceof Integer || value instanceof Float || value instanceof Double) {
			pathMap.put(pathPre + key, value);
		} else if (value instanceof JSONObject) {
			analysisJson(pathPre + key + "/", (JSONObject) value);
		} else if (value instanceof JSONArray) {
			JSONArray jsonArray = (JSONArray) value;
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject tempJson = new JSONObject();
				tempJson.put(i + "", jsonArray.get(i));
				analysisJson(pathPre + key + "/", tempJson);
			}
		}
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java中Retry方法的简单实现

    Java中Retry方法的简单实现

    这篇文章主要介绍了Java中Retry方法的简单实现,Retry主要是利用Java的lambda表达式和线程接口实现有返回值和无返回值的重试,思考了下就写了一个简易Retry功能分享出来,需要的朋友可以参考下
    2024-01-01
  • Java代码实现矩形覆盖实例

    Java代码实现矩形覆盖实例

    这篇文章主要介绍了Java代码实现矩形覆盖实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java异常处理的最佳实践指南

    Java异常处理的最佳实践指南

    异常处理是软件开发中的关键环节,良好的异常处理策略能提高系统的稳定性、可维护性和用户体验,以下是项目中异常处理的全面指南,需要的朋友可以参考下
    2025-09-09
  • java实例方法被覆盖,静态方法被隐藏Explain(详解)

    java实例方法被覆盖,静态方法被隐藏Explain(详解)

    下面小编就为大家带来一篇java实例方法被覆盖,静态方法被隐藏Explain(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • MyBatis-Plus中最简单的查询操作教程(Lambda)

    MyBatis-Plus中最简单的查询操作教程(Lambda)

    这篇文章主要给大家介绍了关于MyBatis-Plus中最简单的查询操作的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Java中Array、List、Map相互转换的方法详解

    Java中Array、List、Map相互转换的方法详解

    这篇文章主要介绍了Java中Array、List、Map相互转换的方法详解,在实际项目开发中或者一些算法面试题目中经常需要用到Java中这三种类型的相互转换,比如对于一个整型数组中寻找一个整数与所给的一个整数值相同,需要的朋友可以参考下
    2023-08-08
  • java中List的toArray()方法用法举例

    java中List的toArray()方法用法举例

    这篇文章主要介绍了java中List的toArray()方法的相关资料,toArray()方法可以将List转换为数组,但需要注意其两种形式的区别,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • IntelliJ IDEA 2020安装使用教程详解

    IntelliJ IDEA 2020安装使用教程详解

    这篇文章主要介绍了IntelliJ IDEA 2020安装使用教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • spring boot写java web和接口

    spring boot写java web和接口

    这篇文章主要介绍了spring boot写java web和接口,Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,下面详细内容需要的小伙伴可以参考一下
    2022-01-01
  • spring security中Authority、Role的区别及说明

    spring security中Authority、Role的区别及说明

    这篇文章主要介绍了spring security中Authority、Role的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论