如何从 api 中提取 JSON 字段
How to extract JSON fields from an api
当我使用 clientbuilder get() 时,我有一个 api 其中 returns 数据格式如下:
final Response response = ClientBuilder.newClient().target("url").queryParam("CustomerQuery", jsonarr).request(MediaType.APPLICATION_JSON).get();
String actual = response.readEntity(String.class);
System.out.println(actual);
结果:
{"_id":{"timestamp":1649320244,"date":"2022-04-07T08:30:44.000+00:00"},"ScheduleTime":"2022-04-07T09:50:00.000+00:00","History":[{"Status":"Pending","Time":"2022-04-07T08:30:44.011+00:00"}],"MyDetails":{"Query":"query1^^","name":"NEH","address":"XXX","Format":"xml","Version":"2"}}
{"_id":{"timestamp":1649320255,"date":"2022-04-07T08:30:55.000+00:00"},"ScheduleTime":"2022-04-07T09:50:00.000+00:00","History":[{"Status":"Pending","Time":"2022-04-07T08:30:55.011+00:00"}],"MyDetails":{"Query":"query2^^^","name":"ABC","address":"YYY","Format":"xml","Version":"1"}}
我需要提取上面字符串中 MyDetails 下的字段,我尝试使用:
final Response response = ClientBuilder.newClient().target("url").request(MediaType.APPLICATION_JSON).get();
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
System.out.println(jsonReader.readObject());
请告诉我如何提取字段。
有很多方法可以做您想做的事。我将只描述其中的一些。您可以使用多个 Json 解析库。最受欢迎的是 Json-Jackson 也称为更快的 XML(ObjectMapper [=29= 的 See link here). You can use method readValue)。对于 class 参数,您可以使用 Map.class 或您的自定义书写 class 将反映您的 Json 的结构。
比有 Gson library, with its user guide
但是如果你想要一个简单的解决方案,我写了我自己的 open-source 库,其中包括 JsonUtils class,它是 Json-Jackson 库的一个薄包装给你一个非常简单的解决方案。在您的情况下,它可能看起来像这样(假设变量 json
是一个包含您的 Json 字符串的 String
):
try {
Map<String, Object>map = JsonUtils.readObjectFromJsonString(json, Map.class);
Map details = map.get("MyDetails");
} catch(IOException ioe) {
...
}
地图 details
将包含一个地图,其中包含“我的详细信息”部分中的所有键和值。如果你想使用这个库在这里是从哪里得到它:它叫做 MgntUtils 你可以在 Github with Javadoc and source code. It is available as maven artifacts as well. Here is a Javadoc for JsonUtils class
上得到它
如果您对如何使用 JsonObject 有疑问,请阅读 Javadoc https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
JsonObject o = jsonReader.readObject();
JsonObject details = o.getJsonObject("MyDetails");
// details.get...
或者,使用不同的 http 客户端,例如鼓励直接对象映射的 Retrofit
当我使用 clientbuilder get() 时,我有一个 api 其中 returns 数据格式如下:
final Response response = ClientBuilder.newClient().target("url").queryParam("CustomerQuery", jsonarr).request(MediaType.APPLICATION_JSON).get();
String actual = response.readEntity(String.class);
System.out.println(actual);
结果:
{"_id":{"timestamp":1649320244,"date":"2022-04-07T08:30:44.000+00:00"},"ScheduleTime":"2022-04-07T09:50:00.000+00:00","History":[{"Status":"Pending","Time":"2022-04-07T08:30:44.011+00:00"}],"MyDetails":{"Query":"query1^^","name":"NEH","address":"XXX","Format":"xml","Version":"2"}}
{"_id":{"timestamp":1649320255,"date":"2022-04-07T08:30:55.000+00:00"},"ScheduleTime":"2022-04-07T09:50:00.000+00:00","History":[{"Status":"Pending","Time":"2022-04-07T08:30:55.011+00:00"}],"MyDetails":{"Query":"query2^^^","name":"ABC","address":"YYY","Format":"xml","Version":"1"}}
我需要提取上面字符串中 MyDetails 下的字段,我尝试使用:
final Response response = ClientBuilder.newClient().target("url").request(MediaType.APPLICATION_JSON).get();
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
System.out.println(jsonReader.readObject());
请告诉我如何提取字段。
有很多方法可以做您想做的事。我将只描述其中的一些。您可以使用多个 Json 解析库。最受欢迎的是 Json-Jackson 也称为更快的 XML(ObjectMapper [=29= 的 See link here). You can use method readValue)。对于 class 参数,您可以使用 Map.class 或您的自定义书写 class 将反映您的 Json 的结构。
比有 Gson library, with its user guide
但是如果你想要一个简单的解决方案,我写了我自己的 open-source 库,其中包括 JsonUtils class,它是 Json-Jackson 库的一个薄包装给你一个非常简单的解决方案。在您的情况下,它可能看起来像这样(假设变量 json
是一个包含您的 Json 字符串的 String
):
try {
Map<String, Object>map = JsonUtils.readObjectFromJsonString(json, Map.class);
Map details = map.get("MyDetails");
} catch(IOException ioe) {
...
}
地图 details
将包含一个地图,其中包含“我的详细信息”部分中的所有键和值。如果你想使用这个库在这里是从哪里得到它:它叫做 MgntUtils 你可以在 Github with Javadoc and source code. It is available as maven artifacts as well. Here is a Javadoc for JsonUtils class
如果您对如何使用 JsonObject 有疑问,请阅读 Javadoc https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
JsonObject o = jsonReader.readObject();
JsonObject details = o.getJsonObject("MyDetails");
// details.get...
或者,使用不同的 http 客户端,例如鼓励直接对象映射的 Retrofit