gpt4 book ai didi

java - 验证字符串 JSON java 库与在线 - 不同的结果

转载 作者:行者123 更新时间:2023-12-02 09:21:15 24 4
gpt4 key购买 nike

我有一个在java中验证字符串json的方法。

我尝试了最好的库,如 JsonSimple、gson 和 jackson。所有这些都有相同的结果,即 json 字符串有效,下面的代码是我的 jackson 验证方法。

//jackson lib
public static boolean isValidJSON(final String json) throws IOException {
boolean valid = true;
try{
objectMapper.readTree(json);

} catch(JsonProcessingException e){
valid = false;
}

return valid;
}

我希望验证 json 的在线网站对我的代码有相同的结果。

我在这些网站中检查了我的字符串

  1. jsonformatter.curiousconcept.com

  2. jsonlint.com

  3. jsonformatter.org

注意:我的字符串 json 实际上是无效的,但我不知道为什么代码和网站结果不一样?

我的 json 字符串:

{
"hasError": false,
"referenceNumber": "57050377",
"errorCode": 0,
"count": 0,
"ott": "5cd3db66e810db0b",
"result": {
"id": 3551,
"guilds": [{
"id": 56,
"code": "TRANSPORTATION_GUILD"
}],
"subscriptionCount": 0,
"subscribed": false,
"numOfComments": 0,
"rate": {
"rate": 0,
"rateCount": 0
},
"fullAddress": "USA",
"tags": [],
"tagTrees": [],
"active": false,
"apiToken": "b9ea8244e34bb9f8d383467ad82",
"numOfLike": 0,
"numOfDislike": 0
}
}
"id": 3551,
"ssoId": "5884675",
"apiToken": "b9ea80c804e34bb9f8d383467ad82",
{
"count": 0,
"ott": "2558074f8d18f49e",
"result": {
"email": "pos_psp@ptest.land",
"fullAddress": "CHINA",
"tags": [],
"tagTrees": [],
"active": false,
"apiToken": "0a4a31d1fe5c457785145fe7f97bc26e",
"numOfLike": 0,
"numOfDislike": 0,
"username": "pos_psp"
}
}
"id": 3552,
"userId": 1357729
"username": "pos_psp"

最佳答案

JSON 解析器仅读取输入的第一个根值。

例如对于以下 JSON 文本,只有第一个具有字段 foo 的对象将被解析,然后解析停止,因此它不会看到其余的对象,而其余的对象可以是任何东西。

{
"foo": 42
}
{
"bar": 666
}

要验证 JSON 文本并验证不存在额外内容,您可以使用底层 Jackson 解析器,而不是高级 ObjectMapper

public static void validateJSON(String json) throws IOException {
JsonFactory jsonFactory = new JsonFactory();
try (JsonParser jsonParser = jsonFactory.createParser(json)) {
if (jsonParser.nextToken() == null)
throw new IOException("No JSON root element");
if (jsonParser.skipChildren().nextToken() != null) {
JsonLocation loc = jsonParser.getTokenLocation();
throw new IOException("Multiple JSON root elements" +
" at line " + loc.getLineNr() +
", column " + loc.getColumnNr());
}
}
}

测试

public static void test(String json) {
try {
validateJSON(json);
System.out.println("Valid");
} catch (Exception e) {
System.out.println("Invalid: " + e);
}
}
test("");
test("{}");
test("{ \"foo\": 42 }");
test("{\n" +
" \"foo\": 42\n" +
"}\n" +
"{\n" +
" \"bar\": 666\n" +
"}");
test(Files.readString(Paths.get("test.json")));

最后一个是读取问题中包含 JSON 的文件。

输出

Invalid: java.io.IOException: No JSON root element
Valid
Valid
Invalid: java.io.IOException: Multiple JSON root elements at line 4, column 1
Invalid: java.io.IOException: Multiple JSON root elements at line 29, column 4

关于java - 验证字符串 JSON java 库与在线 - 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58677589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com