- json 数据:
{
"status": 0,
"desc": "请求成功",
"data": {
"goods": [{
"id": "01",
"name": "手机",
"price": 1000,
"operaList": [{
"taskName": "已发货",
"operTime": "2019-09-02 08:00:00"
}]
},
{
"id": "02",
"name": "电脑",
"price": 3000,
"operaList": [],
"json": {
}
}]
},
"list": [{
"taskName": "已下单",
"operTime": "2019-09-01 08:00:00"
},
{
"taskName": "已付款",
"operTime": "2019-09-01 09:15:22"
}]
}
{
"body": {
"num": 1,
"str": "aaa",
"listStr": ["a","b","c"],
"listjson": [{
"body1": {
"num": 1,
"str": "aaa",
}
},
{
"body2": {
"num": 1,
"str": "aaa",
"listjson": []
}
}]
}
}
- maven依赖:
<dependency>
<groupId>com.github.wnameless</groupId>
<artifactId>json-flattener</artifactId>
<version>0.6.0</version>
</dependency>
二 转为map
/**
* json 扁平化,级别直接默认.隔开
*
* @param jsonStr json
*/
private static void jsonFlatten(String jsonStr) {
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
Map<String, Object> map = JsonFlattener.flattenAsMap(jsonObject.toString());
//修改级别之间的分隔字符
//Map<String, Object> map2 = new JsonFlattener(jsonObject.toString()).withSeparator('/').flattenAsMap();
for (Map.Entry<String, Object> e : map.entrySet()) {
System.out.println(e.getKey() + " = " + e.getValue());
}
}
输出
body.str = aaa
body.num = 1
body.listjson[0].body1.str = aaa
body.listjson[0].body1.num = 1
body.listjson[1].body2.str = aaa
body.listjson[1].body2.num = 1
body.listjson[1].body2.listjson = []
body.listStr[0] = a
body.listStr[1] = b
body.listStr[2] = c
完整代码
/**
* jsonStr 扁平化为 String
*
* @param jsonStr json字符串
* @return 扁平化后的字符串
*/
public static String jsonFlattenAsStr(String jsonStr) {
return JsonFlattener.flatten(jsonStr);
}
/**
* jsonStr 扁平化为 Map
*
* @param jsonStr json字符串
* @return 扁平化后的Map对象
*/
public static Map<String, Object> jsonFlattenAsMap(String jsonStr) {
return JsonFlattener.flattenAsMap(jsonStr);
}
/**
* 反扁平化
* 将扁平化后的 str 转为 json字符串
*
* @param flattenStr 扁平化后的字符串
* @return 立体后的json字符串
*/
public static String jsonUnFlatten(String flattenStr) {
return JsonUnflattener.unflatten(flattenStr);
}
/**
* jsonStr 扁平化为 String
* 并制定级别之间的分隔字符
*
* @param jsonStr json字符串
* @param spliter 自定义分隔符
* @return 扁平化后的字符串
*/
public static String jsonFlattenAsStr(String jsonStr, char spliter) {
return new JsonFlattener(jsonStr).withSeparator(spliter).flatten();
}
/**
* json扁平化为map 并修改分隔符
* 修改级别之间的分隔字符
*
* @param jsonStr json字符串
* @param spliter 自定义分隔符
* @return 扁平化后的Map对象
*/
public static Map<String, Object> jsonFlatten(String jsonStr, char spliter) {
return new JsonFlattener(jsonStr).withSeparator(spliter).flattenAsMap();
}
/**
* 反扁平化
* 将扁平化后的 str 转为 json字符串
*
* @param flattenStr 扁平化后的字符串
* @param spliter 自定义分隔符
* @return j立体后的json字符串
*/
public static String jsonUnFlatten(String flattenStr, char spliter) {
return new JsonUnflattener(flattenStr).withSeparator(spliter).unflatten();
}
参考:https://www.cnblogs.com/hyl8218/p/11066500.html
项目地址:https://github.com/FasterXML/jackson