【问题标题】:Postcode data from API using JSON in Java使用 Java 中的 JSON 对来自 API 的数据进行邮政编码
【发布时间】:2020-03-18 08:19:13
【问题描述】:

我正在尝试使用 postcodes.io API 来计算 2 个邮政编码之间的距离。我正处于提取数据、确认输入的阶段。到目前为止,我有这个:

import com.google.gson.Gson;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

class PostcodeData {

    private String status;
    private String postcode;
    private Float longitude;
    private Float latitude;

    @Override
    public String toString() {
        return "status: "+ status + "\npostcode: " + postcode + "\nlongitude: " + longitude + "\nlatitude: " + latitude + "";
    }
}

public class GsonReadWebPage {

    public static void main(String[] args) throws IOException {

        Scanner pcFrom = new Scanner(System.in);
        System.out.println("From post code: ");
        String pcFromAns = pcFrom.nextLine();

        Scanner pcTo = new Scanner(System.in);
        System.out.println("To post code: ");
        String pcToAns = pcTo.nextLine();

        String url = "https://api.postcodes.io/postcodes/" + pcFromAns + "";

        try (InputStream is = new URL(url).openStream();
             Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) {

            Gson gson = new Gson();
            PostcodeData pcd = gson.fromJson(reader, PostcodeData.class);


            System.out.println(pcd);
        }
    }
}

我目前正忙于检索“响应”之后的数据。示例响应是:

{"status":200,"result":{"postcode":"SW1A 2AA","quality":1,"eastings":530047,"northings":179951,"country":"England","nhs_ha":"London","longitude":-0.127695,"latitude":51.50354,"european_electoral_region":"London","primary_care_trust":"Westminster","region":"London","lsoa":"Westminster 018C","msoa":"Westminster 018","incode":"2AA","outcode":"SW1A","parliamentary_constituency":"Cities of London and Westminster","admin_district":"Westminster","parish":"Westminster, unparished area","admin_county":null,"admin_ward":"St James's","ced":null,"ccg":"NHS Central London (Westminster)","nuts":"Westminster","codes":{"admin_district":"E09000033","admin_county":"E99999999","admin_ward":"E05000644","parish":"E43000236","parliamentary_constituency":"E14000639","ccg":"E38000031","ced":"E99999999","nuts":"UKI32"}}}

我不明白如何处理嵌套的 JSON。任何指针都会很棒,谢谢。

【问题讨论】:

  • Gson 或 Jackson 可以解决您的要求,您是否要将 JSON 传递给 POJO,然后我可以粘贴示例代码行以供您参考,或者您是否想在响应时读取 JSON 元素是否保留为 JSON 本身?
  • 您需要创建一个适合您的JSONPOJO 模型,或者只是将所有内容反序列化为Map。看看:Array of JSON Object to Java POJO

标签: java json api gson


【解决方案1】:

Gson 支持嵌套对象,因此您只需在名为 resultPostcodeData 类上定义一个字段,该字段与 JSON 数据中的 result 对象具有相同的字段。 This article 有一些额外的信息可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多