You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析含字符串与浮点数的JSON文件实现邮编查坐标

Java解析邮编坐标JSON并实现查询功能

我刚好有一套完整的实现方案,能满足你用Java解析指定JSON文件、输入字符串邮编获取对应坐标的需求。先看看我们要处理的JSON结构:

{"11542": [40.870932001722714, -73.62889780791781], "54548": [45.859817510232425, -89.82102639934573], "11547": [40.83072033793459, -73.6445076194238]}

这里必须重点说一下TypeToken的作用——它简直是Gson处理泛型的救星!因为Java的泛型擦除机制,直接给Gson传Map.class的话,它没法识别出Map<String, Double[]>这种具体的泛型结构,而TypeToken可以帮我们保留住泛型的具体类型信息,让Gson准确解析出我们需要的键值对结构。

下面是完整的实现代码:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Map;

public class ZipCodeLookup {
    public class ZipCodeResult {
        final double longitude;
        final double latitude;

        public ZipCodeResult(double longitude, double latitude) {
            this.longitude = longitude;
            this.latitude = latitude;
        }

        public double getLongitude() {
            return longitude;
        }

        public double getLatitude() {
            return latitude;
        }
    }

    public Map<String, Double[]> lookups;

    public ZipCodeLookup(InputStream is) throws IOException {
        Gson gson = new Gson();
        Reader reader = new InputStreamReader(is);
        // 这里TypeToken帮我们保留了Map<String, Double[]>的泛型信息
        lookups = gson.fromJson(reader, new TypeToken<Map<String, Double[]>>() {}.getType());
        reader.close();
    }

    public ZipCodeResult lookupZipcode(String zipcode) {
        Double[] values = lookups.get(zipcode);
        return (values == null) ? null : new ZipCodeResult(values[0], values[1]);
    }
}

你可以这样来使用这个类:

import java.io.FileInputStream;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("your-zip-file.json")) {
            ZipCodeLookup lookup = new ZipCodeLookup(fis);
            ZipCodeLookup.ZipCodeResult result = lookup.lookupZipcode("11542");
            if (result != null) {
                System.out.println("纬度: " + result.getLatitude() + ", 经度: " + result.getLongitude());
            } else {
                System.out.println("未找到该邮编对应的坐标");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

内容的提问来源于stack exchange,提问作者drillau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:21