比如以下是一个范例的嵌套 JSON 示例:

{ "设备ID": "device_001", "韶光戳": "2024-06-02T12:34:56Z", "传感器数据": { "温度": { "值": 22.5, "单位": "摄氏度" }, "湿度": { "值": 60, "单位": "%" }, "位置": { "经度": 120.12345, "纬度": 30.12345, "海拔": 15.5 } }}

以上的数据机构会对我们事情有几个不太友好的地方:

1、在进行数据洗濯与预处理时,常常须要对数据进行洗濯和预处理。
以上的数据是无法实现例如排序、过滤和聚合等操作的。

phpjson嵌套结构若何将嵌套的JSON数据构造扁平化 NoSQL

2、在关系型数据库中,嵌套的 JSON 构造不易存储。

3、机器学习算法哀求输入的数据是扁平化的数值矩阵。

扁平化 JSON后:

{ "设备ID": "device_001", "韶光戳": "2024-06-02T12:34:56Z", "传感器数据_温度_值": 22.5, "传感器数据_温度_单位": "摄氏度", "传感器数据_湿度_值": 60, "传感器数据_湿度_单位": "%", "传感器数据_位置_经度": 120.12345, "传感器数据_位置_纬度": 30.12345, "传感器数据_位置_海拔": 15.5}

那我们该如何将嵌套的JSON数据构造扁平化呢?

json-flattener

这是一个专门为 Javaer 做事的工具类。

项目路径:https://github.com/wnameless/json-flattener

紧张实现以下2个功能:

1、将嵌套的 JSON 工具扁平化;

2、将扁平化的 JSON 工具规复到原始的嵌套构造。

其余,json-flattener 支持多种主流的 JSON 处理库,包括 Jackson、Gson、org.json 和Jakarta,这使得它能够与不同的项目和环境合营利用。

安装仓库

<dependency&gt; <groupId>com.github.wnameless.json</groupId> <artifactId>json-flattener</artifactId> <version>${newestVersion}</version></dependency>快速开始

有下面一个json字符串。

String json = "{ \"a\" : { \"b\" : 1, \"c\": null, \"d\": [false, true] }, \"e\": \"f\", \"g\":2.3 }";// { "a":// { "b": 1,// "c": null,// "d": [false, true]// },// "e": "f",// "g": 2.3// }

扁平化为 Java Map

Map<String, Object> flattenJson = JsonFlattener.flattenAsMap(json);打印// {a.b=1, a.c=null, a.d[0]=false, a.d[1]=true, e=f, g=2.3}

扁平化为 JSON 字符串

String jsonStr = JsonFlattener.flatten(json);打印// {"a.b":1,"a.c":null,"a.d[0]":false,"a.d[1]":true,"e":"f","g":2.3}

从 JSON 字符串还原

String nestedJson = JsonUnflattener.unflatten(jsonStr);打印// {"a":{"b":1,"c":null,"d":[false,true]},"e":"f","g":2.3}

利用保留字符扁平化或取消扁平化

// 支持包含点或方括号的 JSON String flattendJsonWithDotKey = JsonFlattener.flatten("[{\"a.a.[\":1},2,{\"c\":[3,4]}]");打印// {"[0][\"a.a.[\"]":1,"[1]":2,"[2].c[0]":3,"[2].c[1]":4}String nestedJsonWithDotKey = JsonUnflattener.unflatten( "{\"[1][0]\":2,\"[0]\":1,\"[1][1]\":3,\"[2]\":4,\"[3][\\\"ab.c.[\\\"]\":5}"); 打印// [1,[2,3],4,{"ab.c.[":5}]P.S. 几个JSON处理库的比拟