【问题标题】:Create JSON from map of json path/dot notation and value in java从 java 中的 json 路径/点表示法和值的映射创建 JSON
【发布时间】:2022-01-17 09:46:49
【问题描述】:

我有一张 json 路径及其相关值的地图。我想使用这个路径键创建 json 并在最后附加值。像输入这样的东西:

{key: "name1.name2.name3", value: "value1"},
{key:"name1.name2.name4", value: "value2"},
{key:"name1.name5[0]", value: "value3"},
{key:"name1.name5[1]", value: "value4"}

输出为:

{"name1":
   {"name2":
     {"name3":"value1",
      "name4":"value2"
     }
   },
   "name5":["value3","value4"]
}

也可以有一个列表。有没有我可以使用的库?

【问题讨论】:

  • 看看gson还是jackson。
  • @tgdavies 我在我的项目中使用杰克逊,但它没有为此提供任何实用程序。不确定 gson,但尝试了谷歌搜索,但找不到太多创建 json 的内容。
  • @amantsingh 这可以工作。谢谢。

标签: java json jsonpath


【解决方案1】:

好吧,很久以前在一家遥远的公司里,我使用了 apache OGNL 库,它可以做这样的事情。这是链接:OGNL。而且,今天大多数 JSON 解析都是使用 Jackson 或 Gson 库完成的。谷歌“apache jsonpath library”中的快速搜索也提供了一些不错的链接。看到这个:JSONPath - Apache Camel

【讨论】:

  • 如果我没记错的话,OGNL 和 Apache camel 更适合从 object/json 读取值,而不是实际创建 json 对象。
  • 是的,我想是的。但是我一般会尝试做的是,我会尝试将您的输入数据转换为 Map,然后使用任何 Json 库(例如 Jackson 或 Gson)将其转换为 Json。我认为 OGNL 可以帮助您将输入转换为标准地图
【解决方案2】:

实现了来自@amant singh 的评论。 https://github.com/wnameless/json-flattener

Maven 依赖:

<dependency>
    <groupId>com.github.wnameless.json</groupId>
    <artifactId>json-flattener</artifactId>
    <version>0.13.0</version>
</dependency>

测试:

Map<String,String> map = new HashMap<>();
map.put("name1.name2.name3", "value1");
map.put("name1.name2.name4", "value2");
map.put("name1.name5[0]", "value3");
map.put("name1.name5[1]", "value4");

System.out.println(map);
String unflatten = JsonUnflattener.unflatten(map);
System.out.println(unflatten);

输出:

{name1.name5[1]=value4, name1.name5[0]=value3, name1.name2.name3=value1, name1.name2.name4=value2}
{"name1":{"name5":["value3","value4"],"name2":{"name3":"value1","name4":"value2"}}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2021-03-21
    • 2021-11-01
    • 2023-01-31
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多