将密钥放在特定目录中的json中将密钥放在所有目录中(JsonPath.parse(String).put)

时间:2017-07-06 15:47:44

标签: java json jsonpath

我有一个json模板,看起来像这样。

         {
        "parent": {
            "dir1": {
                "key11": {
                    "min": 1,
                    "max": 100
                },
                "key12": {
                    "sample1": "txt",
                    "sample2": "100.25"
                }
            },
            "dir2": {
                "key21": {
                    "min": 1,
                    "max": 100
                },
                "key22": {
                    "sample1": "USD",
                    "sample2": "100.25"
                }
            }
        }
     }

在这里,我有一个逻辑来解析json并检查(在迭代时)parent.dir1是否具有某些特定的密钥,例如: “GOLDENKEY”。 如果未找到key,则在jsonpath中输入“key(goldenKey)” JsonPath.parse(jsonString).put(jsonpath,key,value).json();

要获取jsonPath放置键的位置,我将通过将当前jsonPath拆分为“。”来返回一个节点。从最后并将其转换为需要放置的密钥。 如下面的代码

try {
//set jsonpath, if key not found then catch
JsonPath.parse(json).set("$.parent.dir1.goldenKey", "golden").json();
} catch (final PathNotFoundException e) {
//json path of the key
String jsonpath = "$.parent.dir1.goldenKey";
//get the key by getting last index of "."
final String key = jsonpath.substring(jsonpath.lastIndexOf(".") +1);
jsonpath = jsonpath.substring(0, jsonpath.lastIndexOf("."));
JsonPath.parse(json).put(jsonpath, "goldenKey", "golden").json();}

问题是,不是将键值放在给定的json路径上(即此代码中的dir1),而是将键和值放在dir1和dir23中

如果解释不清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

您正在从硬编码的jsonpath获取子字符串。添加值$.parent.dir1时,jsonpath应为"goldenKey":"golden"。这应该仅在dir1下添加键值对。仔细检查一次。