无法解析JSON文档

时间:2017-04-12 20:46:33

标签: json groovy

我收到了“无法解析JSON文档”错误以及另一个错误:“引起:groovy.json.JsonException:Lexing在线失败:”我无法弄明白。

代码:

    @Test
    public void givenData() {
        RestAssured.baseURI = "https://maps.googleapis.com";

                Response returnGivenData = given().
                param("location", "-33.8670522,151.195736").
                param("radius", "500").
                param("key", "AIzaSyBde6fW-IAx1j-J5TqNOwmvx-_QPHozqRY").
                when().
                get("/maps/api/place/nearbysearch/json").
                then().assertThat().statusCode(200).and().
                contentType(ContentType.JSON).and().
                body("results[0].name", equalTo("Sydney")).and().
                body("results[0].place_id", equalTo("ChIJP3Sa8ziYEmsRUKgyFmh9AQM")).and().
                header("Server", "pablo").
                extract().
                response();
        JsonPath responseJson = ReusableMethods.convertRawDataToJson(returnGivenData);

    int count=responseJson.get("results.size()");     //ERROR LINE
    System.out.println(count);  
}}

错误: io.restassured.path.json.exception.JsonPathException:无法解析JSON文档

at io.restassured.path.json.JsonPath$ExceptionCatcher.invoke(JsonPath.java:930)
at io.restassured.path.json.JsonPath$4.doParseWith(JsonPath.java:895)
at io.restassured.path.json.JsonPath$JsonParser.parseWith(JsonPath.java:975)
at io.restassured.path.json.JsonPath.get(JsonPath.java:201)
at Demo.DemoGivenData2.givenData(DemoGivenData2.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:821)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1131)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:773)
at org.testng.TestRunner.run(TestRunner.java:623)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:357)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310)
at org.testng.SuiteRunner.run(SuiteRunner.java:259)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
at org.testng.TestNG.run(TestNG.java:1018)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)

引起:groovy.json.JsonException:Lexing在线失败:1,列:1,在读取'i'时,无法识别可能的有效JSON值或标点符号。     at groovy.json.JsonLexer.nextToken(JsonLexer.java:85)     在groovy.json.JsonLexer $ nextToken.call(未知来源)     at io.restassured.internal.path.json.ConfigurableJsonSlurper.parse(ConfigurableJsonSlurper.groovy:97)     at io.restassured.internal.path.json.ConfigurableJsonSlurper $ parse $ 0.callCurrent(Unknown Source)     at io.restassured.internal.path.json.ConfigurableJsonSlurper.parseText(ConfigurableJsonSlurper.groovy:83)     at io.restassured.path.json.JsonPath $ 4 $ 1.method(JsonPath.java:893)     at io.restassured.path.json.JsonPath $ ExceptionCatcher.invoke(JsonPath.java:928)     ......还有27个

4 个答案:

答案 0 :(得分:0)

我遇到了同样的Json异常。我发现它发生是因为Json Path没有获得正确的解析输入。在我的情况下,输入到JsonPath的响应是来自放心的给定(),when()和then()之后将发送请求发送到rest api并且它为null。因此建议将日志放在returnGivenData上并检查它是否符合预期。

答案 1 :(得分:0)

在response()之后使用.asString()方法。 请确保您使用的是.asString()方法代替.tostring(),并且JSONPath是正确的

答案 2 :(得分:0)

我遇到了这个问题,发现我在修复它的 RestAssured.baseURI = "http://...."; 行之前初始化了字符串。

但是,在你的情况下,我相信你可以使用
responseJson.getInt("results.size()")
而不是
get("results.size()"); 在错误行中。

答案 3 :(得分:0)

使用

asString() 而不是 toString()

我也有同样的问题,而且已经为我修好了。