我如何从Open Weather Map API解析大型JSON文件?

问题描述 投票:0回答:1

TL; DR我已经复制并粘贴了我需要解析以获取对象的JSON代码段,以便可以使用json.org库提取信息。问题是我不确定如何编写代码以获取JSONObjects并将其传递给JSONObject构造函数。请参阅下面的代码底部,以了解我在说什么。

我正在使用Open Weather Maps API构建一个天气应用程序。问题在于,发送回的数据在具有嵌套JSON对象的庞大JSON文件中,而且非常混乱。我研究了如何解析JSON对象并引入了json.org库,但是构造函数一次只能处理1个对象,当然不能处理整个文件。这是api响应的屏幕截图,因此您可以了解我正在处理的内容。

enter image description here

我的麻烦是我什至不知道从哪里开始。复制输出并将其粘贴到文本文件中,结果将所有内容放到大行中。它太长了,无法成为字符串,因此我不能只是将其传递给JSONObject构造函数。该文件具有嵌套的对象,我需要一些如何将代码指向文件,获取第一个对象,创建JSONObject的方法,然后就可以开始提取所需的信息了。我在下面附加了main(String [] args)方法。我不认为这与问题确实相关,因为代码本身不是问题,但是为了完整起见,我附上了它。

开发人员每天都会像这样处理JSON文件,因此我知道有一种应对疯狂的方法,但是我很茫然。感谢您能提供的任何帮助。

public static void main(String[] args) {
    try {
        URL url = formatQuery("48108");

        BufferedWriter writer = new BufferedWriter(
                new FileWriter("weather.txt"));

        Scanner scan = new Scanner(url.openStream());
        while (scan.hasNextLine()) {
            writer.write(scan.nextLine());
            writer.newLine();
        }
        writer.flush();
        writer.close();

    } catch (MalformedURLException | FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public static URL formatQuery(String zip) throws MalformedURLException {
    StringBuilder builder = new StringBuilder();
    URI uri = URI.create(builder.append(SERVER)
            .append(FORECAST_QUERY)
            .append("zip=" + zip)
            .append(API_KEY).toString());

    URL url = uri.toURL();
    return url;
}

}

 "cod":"200","message":0,"cnt":40,"list":[{"dt":1573268400,"main":{"temp":270.16,"temp_min":270.16,"temp_max":271.3,"pressure":1027,"sea_level":1027,"grnd_level":1002,"humidity":56,"temp_kf":-1.15},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"clouds":{"all":74},"wind":{"speed":2.39,"deg":229},"sys":{"pod":"n"},"dt_txt":"2019-11-09 03:00:00"},{"dt":1573279200,"main":{"temp":270.74,"temp_min":270.74,"temp_max":271.6,"pressure":1025,"sea_level":1025,"grnd_level":1001,"humidity":60,"temp_kf":-0.86},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":86},"wind":{"speed":3.61,"deg":221},"sys":{"pod":"n"},"dt_txt":"2019-11-09 06:00:00"},{"dt":1573290000,"main":{"temp":271.45,"temp_min":271.45,"temp_max":272.02,"pressure":1024,"sea_level":1024,"grnd_level":999,"humidity":57,"temp_kf":-0.58},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":99},"wind":{"speed":3.8,"deg":218},"sys":{"pod":"n"},"dt_txt":"2019-11-09 09:00:00"},{"dt":1573300800,"main":{"temp":271.84,"temp_min":271.84,"temp_max":272.13,"pressure":1021,"sea_level":1021,"grnd_level":997,"humidity":52,"temp_kf":-0.29},"weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04n"}],"clouds":{"all":100},"wind":{"speed":5.08,"deg":208},"sys":{"pod":"n"},"dt_txt":"2019-11-09 12:00:00"},{"dt":1573311600,"main":{"temp":274,"temp_min":274,"temp_max":274,"pressure":1020,"sea_level":1020,"grnd_level":996,"humidity":43,"temp_kf":0},"weather":[{"id":600,"main":"Snow","description":"light snow","icon":"13d"}],"clouds":{"all":100},"wind":{"speed":6.34,"deg":216},"snow":{"3h":0.13},"sys":{"pod":"d"},"dt_txt":"2019-11-09 15:00:00"},{"dt":1573322400,"main":
java json
1个回答
0
投票

您可以通过以下方式实现。

  1. 使用Map REST api以String的形式获取json数据。
  2. 使用Jackson的Java库进行json解析。在这里,您可以将json字符串传递给Jackson,以转换为java对象。
  3. 从json到Java对象创建,您可以使用URL http://www.jsonschema2pojo.org/
© www.soinside.com 2019 - 2024. All rights reserved.