`
远方的彪
  • 浏览: 9510 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

递归处理未知类型的json

    博客分类:
  • java
阅读更多
public static void putAllIdToMap(String json, String name, String id) {
		
		String value = "";
		String key = "";
		Map<String, Object> map = (Map<String, Object>)JsonUtils.jsonToMap(json);
		for (Entry<String, Object> key1 : map.entrySet()) {
			JsonParser parser = new JsonParser();
			JsonElement jsonElement = parser.parse(JsonUtils.object2Json(key1.getValue()));
			if (jsonElement.isJsonObject()) {
				JsonObject jsonObject = jsonElement.getAsJsonObject();
				String jsonstr = jsonObject.toString();
				putAllIdToMap(jsonstr, name, id);
			} else if (jsonElement.isJsonArray()) {
				List<Map<String, Object>> liatMap = (List<Map<String, Object>>)key1.getValue();
				for (Map<String, Object> map2 : liatMap) {
					String jsonstr = JsonUtils.object2Json(map2);
					putAllIdToMap(jsonstr, name, id);
				}
			} else {
				if (key1.getKey().equals(name)) {
					if (!"".equals(key1.getValue()) && null != key1.getValue()) {
						key = key1.getValue().toString();
					}
					
				}
				if (key1.getKey().equals(id)) {
					if (!"".equals(key1.getValue()) && null != key1.getValue()) {
						value = key1.getValue().toString();
					}
				}
				if (StringUtils.isNotEmpty(key) && StringUtils.isNotEmpty(value)) {
					idMap.put(key, value);
					break;
				}
			}
		}
	}

 注:根据name和ID,找出以name为key id的值为value的键值对,由于获取到的json可能是空、Object、JsonArray等,所以先判断,在使用递归解决多层嵌套问题。

分享到:
评论

相关推荐

    NewtonJson

    【NewtonJson】是基于.NET平台的一个强大的JSON处理库,由James Newton-King 开发,它在.NET开发领域中被广泛使用。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    利用Gson.jar快速将对象类型转换为Json

    - **忽略未知字段**:如果JSON字符串包含对象中不存在的字段,可以设置`GsonBuilder`的`excludeFieldsWithoutExposeAnnotation()`方法来忽略这些字段。 - **日期处理**:默认情况下,Gson不处理日期。可以使用`...

    Newtonsoft.Json.dll 6.0版本

    这在处理未知结构的JSON时特别有用。 4. **强类型转换**:使用`JsonConverter`接口,可以自定义特定类型到JSON的转换规则,满足特殊需求。 5. **LINQ to JSON**:提供了一套完整的LINQ API,可以直接在JSON对象上...

    QT5解析json文件demo

    qDebug() 未知类型:" ; } } } // 解析JSON数组 void parseJsonArray(const QJsonArray &arr) { for (auto val : arr) { if (val.isString()) { qDebug() (); } else if (val.isBool()) { qDebug() (); } ...

    Json解析(JavaAPI工具)

    8. **复杂类型的处理**: 对于嵌套的对象或数组,Gson可以自动递归解析,无需额外的代码。 9. **注解支持**: Gson支持使用Java注解来控制序列化和反序列化的行为,比如`@SerializedName`用于指定JSON字段名与Java...

    自定义方法实现msp和json互转(底层实现原理,绝对值)

    使用反射,我们可以动态地创建和设置类的属性,这在处理未知类型的JSON时特别有用。例如,我们可以通过解析JSON中的键来获取类的字段,然后使用`Class.getDeclaredField()`找到对应的字段,再用`field.setAccessible...

    Newtonsoft.Json_C#_

    **Newtonsoft.Json:C#中的JSON处理库** 在.NET开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛应用于网络服务、数据存储以及应用程序内部的数据传输。`Newtonsoft.Json`是由James ...

    Newtonsoft.Json.dll

    Newtonsoft.Json是由James Newton-King开发的一个开源项目,它提供了一个高性能且功能丰富的Json处理API。Newtonsoft.Json.dll是这个库的核心组件,包含了所有相关的类型和方法,使得C#对象可以轻松地转换为Json字符...

    Delphi Json 存 DataSet (memory)实用代码,Delphi原生TJson

    这在处理JSON时非常有用,因为JSON的结构可能是未知的或变化的。 在`JsonFuncs2.pas`文件中,可能包含了如下函数: - `JsonToDataSet`: 将JSON字符串转换为TClientDataSet。 - `DataSetToJson`: 将TClientDataSet...

    jackjson类型转换各种方法

    杰克逊(Jackson)是Java领域中广泛使用的JSON处理库,它提供了强大的功能,使得JSON与其他数据类型(如Java对象)之间的转换变得简单且高效。本文将深入探讨Jackson框架在JSON转换中的各种方法,帮助你更好地理解和...

    gson-2.8.5.zip

    通过递归调用`fromJson()`和`toJson()`,可以轻松地处理复杂的JSON数据。 7. **流式API**: - Gson提供了流式API,允许开发者以非阻塞的方式处理大型JSON数据,这对于处理大文件或者网络流特别有用。 8. **类型...

    php实现数组中索引关联数据转换成json对象的方法

    这个实例中,我们看到一个关于错误处理的部分:“ERROR 未知类型,还未解析”。当遇到非数组和非对象的类型时,程序会输出错误信息并调用Yii框架的`Yii::app()-&gt;end()`来终止执行。在实际应用中,应根据需求进行适当...

    josn 各种转换

    当你从服务器获取到JSON数据时,通常需要将其转换为Java对象以便进一步处理。Java中常用的库如Gson、Jackson、org.json等提供了解析功能。以Jackson为例,可以使用`ObjectMapper`类的`readValue()`方法实现: ```...

    JS动态遍历json中所有键值对的方法(不知道属性名的情况)

    这个`traverseJson`函数会深入到JSON对象的每一层,处理所有键值对,无论是基本类型还是嵌套的对象。 在处理JSON数据时,有时还需要借助一些在线工具来帮助我们。比如,`JSON代码检验、检验、美化、格式化工具`可以...

    ObjectAndJson

    对于嵌套的对象,Json.NET会递归地进行反序列化,生成对应的嵌套C#对象。 除此之外,Json.NET还提供了其他高级功能,如忽略空值、忽略未知属性、自定义转换器等。在处理大数据或性能敏感的场景时,还可以使用`...

    nobject:用于在nim中动态键入的动态对象,允许递归类型。 受.net对象启发

    递归类型是指类型定义中包含了自身的一种情况,这在处理树状数据结构或者自引用结构时非常有用。`nobject`库的一个独特之处在于,它不仅支持动态键入,还支持递归类型的动态对象。这意味着你可以创建一个动态对象,...

    一个gson小实验(调试还没通过谨慎下载)

    - 递归结构:处理包含自我引用的对象时可能会导致无限循环。 - 空值处理:JSON中的null值在Java对象中如何映射。 - 键名不匹配:JSON键与Java字段名不一致,没有使用`@SerializedName`注解。 这个实验可能是在尝试...

    用JavaScript对JSON进行模式匹配 (Part 2 – 实现)

    为了处理未知的运算符,我们添加了一个默认运算符。当模式中使用的运算符未在`operators`中定义时,这个默认运算符会根据测试值的类型决定使用哪个运算符。例如,如果测试值是数组,就使用`in`运算符;如果是正则...

    HL7 V2 到 V3的转换

    HL7 V3中的XML ITS(Implementation Technology Specification)定义了一系列抽象类型,如ANY,用于表示任何未知或未指定的类型。这些抽象类型在实际应用中可以通过具体的引用类型(Derived Type)进行实例化。例如...

Global site tag (gtag.js) - Google Analytics