我有两个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?
作为一个选项,你可以使用 第戎 来安全、方便地读取、更新和序列化无模式的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"}