
说明
本文章代码出自摸石头过河写出来的,隔天再写不一定写得出来,所以发个文章记录下。
为什么写这个代码
需求要求,有一段json字符串,数据结构是图下这样:
{
"id": "1",
"string": "sb",
"double": "33",
"long": "2",
"boolean": "true",
"domain": {
"id": "1",
"name": "大白",
"org": {
"code": "1"
},
"jd": [{
"j": "false",
"d": "4"
}, {
"j": "true",
"d": "6"
}]
},
"orgs": [{
"code": "bb",
"id": "true",
"org": {
"code": "1"
},
"sb": [{
"s": "1"
}, {
"b": "true"
}]
}, {
"code": "cc",
"id": "false",
"org": {
"code": "1"
},
"sb": [{
"s": "2"
}, {
"b": "false"
}]
}]
}
可以得知,所有属性都是string类型,又得知有个Attr类,里面放着json属性对应的类型,要求我们如果json里面有属性和Attr类里面名称对应的上,就要把string转换相对应的类型。
以上可能有点绕,举个栗子:图上有个id的属性,它的值是字符串的1,Attr类里面id对应的值是integer,所以最后的结果要是integer类型。
由于json数据结构不可知,只能穷举+递归针对处理:
1、基本数据类型
2、object类型
3、array类型
4、object类型中有array类型
5、array类型中有object类型
实例代码
package com.lq.demo1.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.lq.demo1.entity.Attr;
import com.lq.demo1.entity.Constants;
import lombok.extern.slf4j.Slf4j;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
public class TestService {
public static void main(String[] args) throws JsonProcessingException {
String json = "{\n" +
"\t\"id\": \"1\",\n" +
"\t\"string\": \"sb\",\n" +
"\t\"double\": \"33\",\n" +
"\t\"long\": \"2\",\n" +
"\t\"boolean\": \"true\",\n" +
"\t\"domain\": {\n" +
"\t\t\"id\": \"1\",\n" +
"\t\t\"name\": \"大白\",\n" +
"\t\t\"org\": {\n" +
"\t\t\t\"code\": \"1\"\n" +
"\t\t},\n" +
"\t\t\"jd\": [{\n" +
"\t\t\t\"j\": \"false\",\n" +
"\t\t\t\"d\": \"4\"\n" +
"\t\t}, {\n" +
"\t\t\t\"j\": \"true\",\n" +
"\t\t\t\"d\": \"6\"\n" +
"\t\t}]\n" +
"\t},\n" +
"\t\"orgs\": [{\n" +
"\t\t\"code\": \"bb\",\n" +
"\t\t\"id\": \"true\",\n" +
"\t\t\"org\": {\n" +
"\t\t\t\"code\": \"1\"\n" +
"\t\t},\n" +
"\t\t\"sb\": [{\n" +
"\t\t\t\"s\": \"1\"\n" +
"\t\t}, {\n" +
"\t\t\t\"b\": \"true\"\n" +
"\t\t}]\n" +
"\t}, {\n" +
"\t\t\"code\": \"cc\",\n" +
"\t\t\"id\": \"false\",\n" +
"\t\t\"org\": {\n" +
"\t\t\t\"code\": \"1\"\n" +
"\t\t},\n" +
"\t\t\"sb\": [{\n" +
"\t\t\t\"s\": \"2\"\n" +
"\t\t}, {\n" +
"\t\t\t\"b\": \"false\"\n" +
"\t\t}]\n" +
"\t}]\n" +
"}";
log.info("老:{}", json);
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode = (ObjectNode) objectMapper.readTree(json);
Attr a = Attr.builder().id(1).attributeName("id").attributeType("INTEGER").parentId(-1).build();
Attr b = Attr.builder().id(2).attributeName("string").attributeType("STRING").parentId(-1).build();
Attr c = Attr.builde

本文介绍了一个Java代码示例,用于将包含复杂嵌套结构的JSON字符串转换为相应类型的对象。代码处理了基本数据类型、对象和数组,并通过递归实现了动态类型转换。示例中展示了如何根据预定义的属性类型映射转换JSON数据。
最低0.47元/天 解锁文章
1362

被折叠的 条评论
为什么被折叠?



