我有两个JSON文件。我只需要比较两个中的特定键。
如何从JSON文件中删除所有其余键?
JSON 1的示例
{
"score" : "100"
}
JSON 2的示例
{
"Tests": [ {"score":"100"} ]
}
我希望仅获取“分数”键和值,而忽略所有其他键和值。
答案 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);
}
`