如何将单个数据从JSON拉到字符串?

时间:2014-03-09 11:42:46

标签: java json parsing

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

                try {
                    JSONObject json = new JSONObject(readUrl("http://api.wunderground.com" +"/api/106c4dee47162999/history_20060405/q/CA/San_Francisco.json"));

                    JSONObject data =  json.getJSONObject("observations.tempm");
                    System.out.println(data);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            private static String readUrl(String string) throws IOException {
                BufferedReader reader = null;
                try {
                    String urlString = string;
                    URL url = new URL(urlString);
                    reader = new BufferedReader(new InputStreamReader(url.openStream()));
                    StringBuffer buffer = new StringBuffer();
                    int read;
                    char[] chars = new char[1024];
                    while ((read = reader.read(chars)) != -1)
                        buffer.append(chars, 0, read); 

                    return buffer.toString();
                } finally {
                    if (reader != null)
                        reader.close();
                }
            }
        }

2.errors:

  

org.json.JSONException:找不到JSONObject [“observation.tempm”]。   at org.json.JSONObject.get(JSONObject.java:454)   at org.json.JSONObject.getJSONObject(JSONObject.java:553)   在com.parser.ParserObject.main(ParserObject.java:17)

3 个答案:

答案 0 :(得分:2)

您使用的JSON的有趣部分是:

{'history':
  {'observations':
    [
      {'tempm':'10.0'}
    ]
  }
}

使用此:

JSONObject json = ...;
JSONObject history = (JSONObject) json.get("history");
JSONArray observations = (JSONArry) json.get("observations");
JSONObject observation0 = (JSONObject) observations.get(0);
String tempm = observation0.get("tempm");

如果您对其他数组元素感兴趣,请使用其他索引。

答案 1 :(得分:0)

'观察'不在root中。你需要先获得'历史'。 “观察”是“历史”的一部分。并且'观察'是一个列表/数组。

答案 2 :(得分:0)

我建议使用'jackson'或'gson'library.parsing native json真是一种痛苦 你甚至可以在一定程度上取消/编组来自JSON的必需字段/对象。