如何使用 java 球衣过滤 json 结果
How to filter json result using java jersey
如何过滤 Json 结果以获得特定字段。任何人都可以帮助我克服这种困惑。下面是使用 jersey 客户端的 java 编程代码。该程序使用病毒总数 API 键从病毒总数中获取数据。我得到了 Json 格式的结果,我的目标是过滤 Json 结果并获取特定字段而不是所有字段
public static void main(String[] args)
{
String ip = "13.57.233.180";
Client client = Client.create();
WebResource resource = client.resource("https://www.virustotal.com/vtapi/v2/ip-address/report?ip="+ip+"&apikey="+API_KEY);
ClientResponse response = resource.accept("appliction/json").get(ClientResponse.class);
if(response.getStatus() != 200)
{
throw new RuntimeException("Failed Error Code : "+response.getStatus());
}
String output = response.getEntity(String.class);
System.out.println("");
System.out.println("Output from the server");
System.out.println("");
System.out.println(output);
}
我得到的输出是
{
"country": "US",
"response_code": 1,
"detected_urls": [],
"resolutions": [
{
"last_resolved": "2018-01-28 00:00:00",
"hostname": "ec2-13-57-233-180.us-west-1.compute.amazonaws.com"
}
],
"verbose_msg": "IP address in dataset"
}
而且我需要对该结果进行过滤。我的意思是我只需要国家和详细消息字段。请建议我如何克服这个问题?
首先,请更正您代码中的资源类型,因为 application/json
的拼写有误
您可以使用 Jackson for Java 将您的数据放入 Map/Hashmap。
在 Jackson Code 的代码中添加此依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
然后将以下行添加到您的代码中:
String output = response.getEntity(String.class);
Map<String, Object> map = new ObjectMapper().readValue(output,HashMap.class);
System.out.println("Country: " + map.get("country"));
System.out.println("Verbose Message: " + map.get("verbose_msg"));
这将从字符串 json(输出)获取数据并将其映射到哈希图上。
我希望这能解决您的问题。
谢谢
如果您不想构建特定的 DTO 来将您的结果映射为 Java 对象,请尝试以下操作,它将您的结果映射为 Java 地图,您将能够select 所需的字段,使用它们的名称作为键:
Map response = resource.accept("application/json").get(Map.class);
System.out.printf("Country: %s\n", map.get("country"));
System.out.printf("Verbose Message: %s\n", map.get("verbose_msg"));
这个方案和@Safeer提出的类似,但是映射是直接由Jersey完成的,不需要转成String再转成Map。
如何过滤 Json 结果以获得特定字段。任何人都可以帮助我克服这种困惑。下面是使用 jersey 客户端的 java 编程代码。该程序使用病毒总数 API 键从病毒总数中获取数据。我得到了 Json 格式的结果,我的目标是过滤 Json 结果并获取特定字段而不是所有字段
public static void main(String[] args)
{
String ip = "13.57.233.180";
Client client = Client.create();
WebResource resource = client.resource("https://www.virustotal.com/vtapi/v2/ip-address/report?ip="+ip+"&apikey="+API_KEY);
ClientResponse response = resource.accept("appliction/json").get(ClientResponse.class);
if(response.getStatus() != 200)
{
throw new RuntimeException("Failed Error Code : "+response.getStatus());
}
String output = response.getEntity(String.class);
System.out.println("");
System.out.println("Output from the server");
System.out.println("");
System.out.println(output);
}
我得到的输出是
{
"country": "US",
"response_code": 1,
"detected_urls": [],
"resolutions": [
{
"last_resolved": "2018-01-28 00:00:00",
"hostname": "ec2-13-57-233-180.us-west-1.compute.amazonaws.com"
}
],
"verbose_msg": "IP address in dataset"
}
而且我需要对该结果进行过滤。我的意思是我只需要国家和详细消息字段。请建议我如何克服这个问题?
首先,请更正您代码中的资源类型,因为 application/json
的拼写有误您可以使用 Jackson for Java 将您的数据放入 Map/Hashmap。 在 Jackson Code 的代码中添加此依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
然后将以下行添加到您的代码中:
String output = response.getEntity(String.class);
Map<String, Object> map = new ObjectMapper().readValue(output,HashMap.class);
System.out.println("Country: " + map.get("country"));
System.out.println("Verbose Message: " + map.get("verbose_msg"));
这将从字符串 json(输出)获取数据并将其映射到哈希图上。
我希望这能解决您的问题。 谢谢
如果您不想构建特定的 DTO 来将您的结果映射为 Java 对象,请尝试以下操作,它将您的结果映射为 Java 地图,您将能够select 所需的字段,使用它们的名称作为键:
Map response = resource.accept("application/json").get(Map.class);
System.out.printf("Country: %s\n", map.get("country"));
System.out.printf("Verbose Message: %s\n", map.get("verbose_msg"));
这个方案和@Safeer提出的类似,但是映射是直接由Jersey完成的,不需要转成String再转成Map。