我收到了“无法解析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个
答案 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()
我也有同样的问题,而且已经为我修好了。