2014-03-02 50 views
-1

我需要解析播放应用程序中的json响应,并获取列表中的所有字段/值。使用播放库解析json响应

我得到如下回应:

WSRequestHolder request = WS.url("someurl"); 
request.setQueryParameter("somekey", "somevalue"); 
Promise<Response> promise = request.get(); 
Response response = promise.get(); 
JsonNode json = response.asJson(); 

响应来自象下面这样:

{"results":{"key1":value1,"key2":value2,"key3":value3},"errorMessage":"","statusCode":2000,"success":true,"version":"1.01"} 

我需要从“结果”列表中得到所有的精密组件/值。我如何使用播放json库/ apis可用?我正在使用play 2.1.1。

谢谢。

+1

的官方文档解释了如何做到这一点: HTTP:// WWW。 playframework.com/documentation/2.2.x/JavaJsonRequests –

回答

0

由于结果是JsonNode,因此您可以使用JsonNode的所有细节。

举例来说,如果你要访问"results",做到:

JsonNode results = json.get("results"); 

你也有方法,如.has().path().entries(),等等等等,一个JsonNode可以表示任何JSON值,包括null

要测试你可以使用.is*()方法类型:.isObject().isNumber().isMissing()(注:后者需要使用.path()代替.get())。

实施例:

json.path("foo").isMissing(); // true 
json.path("errorMessage").getTextValue(); // "" 
json.get("results").get("key2"); // value2 
json.get("success").getBooleanValue(); // true 

等等。参见the javadoc for JsonNode

另一个解决方案是将该JSON反序列化为POJO。但这意味着首先创建POJO,然后使用ObjectMapper.read*()的值。

(边注:令人惊讶的是Play使用杰克逊的1.9.x而2.0+已经使用了很多年......)