不使用键和连接内部json值的JSON对象解析

bihw5rsg  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(91)

我在DB中有一个列,以如下JSON格式存储数据:{“ad002”:“5601087282462117”,“be003”:“{“1”:“ABC”,“2”:“DEF”,“3”:“DEF”}",“ze024”:“18”}
我想迭代没有键的数据,因为数据中有数千个键,如果发现像be 003这样的元素有更多的键值,那么所有的值都应该连接起来并返回那个值。
我尝试了以下解决方案
JSONObject outerObject = new JSONObject(jsonInput); String ad002Value = outerObject.optString("ad002"); JSONObject be003Object = new JSONObject(outerObject.optString("be003"));
但这里我需要依赖于键,这不是必需的,因为有成千上万的键。我需要进一步设置一些对象的值。

332nm8kg

332nm8kg1#

使用JSON库(如 * Josson *)进行转换。
https://github.com/octomix/josson

    • 荒漠化**
Josson josson = Josson.fromJsonString(
    "{" +
    "    \"ad002\": \"5601087282462117\"," +
    "    \"be003\": \"{\\\"1\\\":\\\"ABC\\\",\\\"2\\\":\\\"DEF\\\",\\\"3\\\":\\\"DEF\\\"}\"," +
    "    \"ze024\": \"18\"" +
    "}");
    • 转型**
JsonNode node = josson.getNode(
    "entries()" +        // Step 1
    ".field(value" +
    "       .if(startsWith('{')," + // Assume it is an object
    "           json().entries().value.@join()," +
    "           ?)" +
    "       )" +         // Step 2
    ".map(key::value)" + // Step 3
    ".mergeObjects()");  // Final step
System.out.println(node.toPrettyString());
    • 产出**
{
  "ad002" : "5601087282462117",
  "be003" : "ABCDEFDEF",
  "ze024" : "18"
}
    • 路径跟踪**

您可以使用函数getPathTrace()查看每个步骤的输出。

PathTrace trace = josson.getPathTrace(...)
  • 步骤1输出 *
[ {
  "key" : "ad002",
  "value" : "5601087282462117"
}, {
  "key" : "be003",
  "value" : "{\"1\":\"ABC\",\"2\":\"DEF\",\"3\":\"DEF\"}"
}, {
  "key" : "ze024",
  "value" : "18"
} ]
  • 步骤2输出 *
[ {
  "key" : "ad002",
  "value" : "5601087282462117"
}, {
  "key" : "be003",
  "value" : "ABCDEFDEF"
}, {
  "key" : "ze024",
  "value" : "18"
} ]
  • 步骤3输出 *
[ {
  "ad002" : "5601087282462117"
}, {
  "be003" : "ABCDEFDEF"
}, {
  "ze024" : "18"
} ]

相关问题