首页 > 编程语言 >Java 中 Json 扁平化与去扁平化处理

Java 中 Json 扁平化与去扁平化处理

时间:2023-07-18 16:33:14浏览次数:73  
标签:Java 扁平化 age Json student data class name

  • 引入依赖
<!--依赖 -->
<dependency>
     <groupId>com.github.wnameless.json</groupId>
     <artifactId>json-flattener</artifactId>
     <version>0.16.4</version>
 </dependency>
  • demo
    public static void main(String[] args) {
        String jsonStr = "";
        jsonStr = FileUtil.readUtf8String("x.json");

        // 扁平化,深层次的json结构转成key-value
        Map<String, Object> flatJson = JsonFlattener.flattenAsMap(jsonStr);
        flatJson.entrySet().forEach(System.out::println);

        // 去扁平化,还原深层次的json
        String unFlatten = JsonUnflattener.unflatten(flatJson);

        // 扁平化级别默认.隔开,withSeparator 指定分割符
        JsonFlattener jsonFlattener = new JsonFlattener(jsonStr);
        Map<String, Object> map = jsonFlattener.withSeparator('-').flattenAsMap();
    }
  • 效果
# 原始json
{
    "code": 200,
    "data": [
        {
            "no": "1001",
            "school": "xxx市第一实验小学",
            "class": [
                {
                    "student": [
                        {
                            "name": "张同学",
                            "age": 6
                        },
                        {
                            "name": "王同学",
                            "age": 7
                        }
                    ],
                    "teacher": "吴老师",
                    "name": "一(1)班"
                }
            ]
        },
        {
            "no": "1002",
            "school": "xxx市第二实验小学",
            "class": [
                {
                    "student": [
                        {
                            "name": "欧阳同学",
                            "age": 6
                        }
                    ],
                    "teacher": "陈老师",
                    "name": "一(2)班"
                }
            ]
        }
    ],
    "requestId": "1680177848458"
}





# 扁平化
code=200
requestId=1680177848458
data[0]-school=xxx市第一实验小学
data[0]-no=1001
data[0]-class[0]-name=一(1)班
data[0]-class[0]-teacher=吴老师
data[0]-class[0]-student[0]-name=张同学
data[0]-class[0]-student[0]-age=6
data[0]-class[0]-student[1]-name=王同学
data[0]-class[0]-student[1]-age=7
data[1]-school=xxx市第二实验小学
data[1]-no=1002
data[1]-class[0]-name=一(2)班
data[1]-class[0]-teacher=陈老师
data[1]-class[0]-student[0]-name=欧阳同学
data[1]-class[0]-student[0]-age=6



# 去扁平化
{
    "code": 200,
    "data": [
        {
            "no": "1001",
            "school": "xxx市第一实验小学",
            "class": [
                {
                    "student": [
                        {
                            "name": "张同学",
                            "age": 6
                        },
                        {
                            "name": "王同学",
                            "age": 7
                        }
                    ],
                    "teacher": "吴老师",
                    "name": "一(1)班"
                }
            ]
        },
        {
            "no": "1002",
            "school": "xxx市第二实验小学",
            "class": [
                {
                    "student": [
                        {
                            "name": "欧阳同学",
                            "age": 6
                        }
                    ],
                    "teacher": "陈老师",
                    "name": "一(2)班"
                }
            ]
        }
    ],
    "requestId": "1680177848458"
}

标签:Java,扁平化,age,Json,student,data,class,name
From: https://www.cnblogs.com/qqkkOvO/p/17563387.html

相关文章

  • 【CJsonObject】C++ JSON 解析器使用教程
    能选封装的尽量不使用底层的一、CJsonObject简介CJsonObject是Bwar基于cJSON全新开发一个C++版的JSON库。CJsonObject的最大优势是轻量、简单好用,开发效率极高,尤其对多层嵌套json的读取和生成、修改极为方便。CJsonObject比cJSON简单易用得多,且只要不是有意不......
  • Java程序运行机制
    Java程序运行机制1编译型complie-就是一次性把活干完,量大,但是后续有修改需要重新干,比如C/C++,2解释型-用一点,解释一点,性能稍微损失javaScriptpython3程序运行机制4Java偏向解释性语言,不过具有两种类型的特性,先编译,后解释......
  • 在不改变语言的前提下如何推进Java的不断演进
    JamesGosling在“TheFeelofJava”中说到:Java是一种蓝领语言,它并非博士的论文素材而是用于完成工作的语言。各式各样的程序员都非常熟悉Java,因为在设计Java之初我就坚持这样一种观点:选择久经考验的东西而非仅仅是听起来很美。Java所获得的巨大成功证明了这种设计方式是正确的,......
  • Python的布尔值转换为JavaScript的布尔值
    在Python后端开发中,我们返回布尔值通常为True,False。而不是'true','false',但在JavaScript必须使用小写的true和false,且不是字符串。这时就必须在前端对数据进行转换了。后端返回{"status":200,"data":["show":True,"verf":False]}前端转换代码response.data.forEach......
  • java HelloWorld
    HelloWorld1新建一个文件夹,存放代码2新建一个java文件-java后缀名为.java-Hello.java-[注意点]系统可能没有显示文件后缀名,我们需要手动打开3编写代码publicclassHello{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!"......
  • java-自动建表-按月份
    采用的是xxl-job任务调度importorg.apache.commons.io.FileUtils;importcom.xxl.job.core.biz.model.ReturnT;importcom.xxl.job.core.handler.IJobHandler;importcom.xxl.job.core.handler.annotation.XxlJob;importorg.slf4j.Logger;importorg.slf4j.LoggerFactor......
  • 设计模式-组合模式在Java中的使用示例-杀毒软件针对文件和文件夹进行杀毒
    场景组合模式组合模式(CompositePattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。在组合模式中引......
  • javascript-js正则表达式-常用的正则表达式
    js常用的正则表达式1.匹配Email地址:constemailRegex=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;2.匹配URL:consturlRegex=/^(https?:\/\/)?([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(:[0-9]+)?(\/[^\s]*)?$/;3.匹配日期(YYYY-MM-DD):constdateRegex=/^\d{4}-(0[1-9]|......
  • 介绍社交论坛问答发帖系统源码-java+vue+uniapp开发前后端
    前后端分离社交论坛问答发帖BBS源码,社交论坛小程序|H5论坛|,app论坛是java+vue+uniapp开发的前后端分离社交论坛问答发帖/BBS项目,包括论坛图文帖,视频,圈子,IM私聊,微信支付,付费贴,积分签到,钱包充值等论坛小程序论坛app完整功能演示地址:www.runruncode.com/java/19462.html ......
  • 使用 JavaScript 脚本来进行复杂的查询改写
    有这么一个需求:网关里怎样对跨集群搜索进行支持的呢?我想实现:输入的搜索请求是lp:9200/index1/_search这个索引在3个集群上,需要跨集群检索,也就是网关能否改成lp:9200/cluster01:index1,cluster02,index1,cluster03:index1/_search呢?索引有一百多个,名称不一定是app,还......