如何比较JSON中的特定键?

时间:2019-04-28 09:13:59

标签: java json

我有两个JSON文件。我只需要比较两个中的特定键。

如何从JSON文件中删除所有其余键?

JSON 1的示例

{
"score" : "100"
}

JSON 2的示例

{
"Tests": [ {"score":"100"} ]
}

我希望仅获取“分数”键和值,而忽略所有其他键和值。

2 个答案:

答案 0 :(得分:0)

JsonPath非常适合这里。它允许您搜索在json文档中找到的键的任何地方。 这是使用问题详细信息的示例:

import com.jayway.jsonpath.JsonPath;
    public static void main(String[] args) {
        // deep-search for "score" key in all the json doc
        String searchAllScores = "$..score";
        try (InputStream is1 = Files.newInputStream(Paths.get("c:/temp/xx1.json"));
                 InputStream is2 = Files.newInputStream(Paths.get("c:/temp/xx2.json"))) {
            List<String> keys1 = JsonPath.parse(is1).read(searchAllScores);
            List<String> keys2 = JsonPath.parse(is2).read(searchAllScores);
            System.out.println(keys1);
            System.out.println(keys2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

如果将两个jso文档放入代码示例中提到的两个文件中,则会得到输出:

    ["100"]
    ["100"]

答案 1 :(得分:0)

如果您不关心json字符串中的结构,则可以使用此函数提取字符串值并进行比较`

public static String getStringValueForKey(String json, String key) {
        int keyPos = json.indexOf(key);
        int caretPos = json.indexOf(":", keyPos);
        int valueQuoteStart = json.indexOf("\"", caretPos);
        int valueQuoteEnd = json.indexOf("\"", valueQuoteStart + 1);
        return json.substring(valueQuoteStart + 1, valueQuoteEnd);
    }

`