使用JSON路径用json对象更新json中的值。

问题描述 投票:1回答:1

我有两个json文件。一个是我希望更新的文件,另一个是我读取值的文件。我的问题是,要覆盖的值需要被另一个对象覆盖。当我使用JSON路径库时,我在值空间得到一个空映射。

举个例子。

val sourceConfigStr =
  """
    |{
    |   "path": {
    |                    "dummyKey1" : "nothing",
    |                    "dummyKey2" : "data.csv"
    |                 },
    |   "format": "RANDOM",
    |   "schema": "schema.json"
    |}
  """.stripMargin;

val modifiedString = JsonPath.parse(sourceConfigStr).set("$.path.dummyKey1", Map("dummyKey13" ->  "Hello")).jsonString()
val modifiedSource = JsonUtil.fromJson[Map[String,Any]](modifiedString);
println(modifiedSource)

Output : Map(path -> Map(dummyKey1 -> Map(), dummyKey2 -> data.csv), format -> RANDOM, schema -> schema.json)

如你所见,dummyKey1被一个null Map()替换了。我如何解决这个问题?

更新:这个问题的存在是因为.set()函数需要一个字符串值。所以,我创建了一个json字符串,并试着传递它。然而,现在我的输出有反斜杠和""。我如何使它成为一个统一的JSON?

java scala jsonpath
1个回答
0
投票

作为一个选项,你可以使用 第戎 来安全、方便地读取、更新和序列化无模式的JSON值。

val sourceConfigStr =
  """
    |{
    |   "path": {
    |                    "dummyKey1" : "nothing",
    |                    "dummyKey2" : "data.csv"
    |                 },
    |   "format": "RANDOM",
    |   "schema": "schema.json"
    |}
  """.stripMargin

val json = parse(sourceConfigStr)
json.path.dummyKey1 = json"""{"dummyKey13":"Hello"}"""
println(json)

预期输出:

{"path":{"dummyKey1":{"dummyKey13":"Hello"},"dummyKey2":"data.csv"},"format":"RANDOM","schema":"schema.json"}
© www.soinside.com 2019 - 2024. All rights reserved.