Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证字符串JSON java库与联机-不同的结果_Java_Json - Fatal编程技术网

验证字符串JSON java库与联机-不同的结果

验证字符串JSON java库与联机-不同的结果,java,json,Java,Json,我有一个用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); }

我有一个用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的在线站点对我的代码有相同的结果

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

  • jsonformatter.curiousconcept.com

  • jsonlint.com

  • 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"
    

    当你说你测试过的所有库(jackson、gson等)都有相同的结果时,你到底是什么意思?相同的错误消息,相同的异常类,相同的堆栈跟踪?请在问题中张贴检查结果,以便我们的同事提供更好的答案

    当您调用问题中提到的站点时,没有人保证在后端您的示例json会被您测试过的库之一处理,甚至没有人保证站点的后端是用Java/任何JVM语言编写的,因此这些json库甚至可能无法供这些站点的开发人员访问


    无论如何,每个基于java或不基于java的库都有自己的解析json对象的算法,因此错误也可能略有不同。这就是产生不同结果的原因,这是正常的。

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

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

    {
    “福”:42
    }
    {
    “酒吧”: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());
            }
        }
    }
    
    试验

    最后一个是从问题中读取带有JSON的文件

    输出

    无效:java.io.IOException:没有JSON根元素
    有效的
    有效的
    无效:java.io.IOException:第4行第1列有多个JSON根元素
    无效:java.io.IOException:第29行第4列有多个JSON根元素
    
    我的意思是,所有站点都有相同的错误“Multiple JSON root elements error”,但所有库返回的JSON都是有效的
    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")));