如何使用 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。