json 扁平化 及立体化

  • 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,400评论 0 3
  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,443评论 0 34
  • 回到当下的力量: 给亲爱的自己 亲爱的,我看到你今天上午情绪不高,当你写作业时把最近一个月来的时间管理总结了一下...
    馨香玫瑰阅读 270评论 0 3
  • 欲望, 压抑的太久, 久到忘记了,作为人的渴望和冲动, 久到,什么都忘了, 没了念想,没了渴望, 没了,没了, 真...
    葵和海阅读 142评论 0 0
  • 今天早上送儿子上学回来,小区内外,停车位一个接一个,真是让人喜笑颜开的一天。 接着,去到桂花园跑步。跑跑走走,走走...
    窈静姝阅读 216评论 0 1

友情链接更多精彩内容