用Java解析JSON数据

时间:2013-11-24 22:21:52

标签: java json api parsing

我想解析此页面中的一些数据: http://www.bbc.co.uk/radio1/programmes/schedules/england/2013/03/1.json

我要解析的数据是标题,但我不确定如何提取数据。这是我到目前为止所做的:

 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;

 public class Test
 {
    public Test() { }

    public static void main(String[] args)
    {
            URL url;
            HttpURLConnection connection = null;
            InputStream is = null;
            JSONParser parser = new JSONParser();

            try
            {
                    url = new URL("http://www.bbc.co.uk/radio1/programmes/schedules/england/2013/03/1.json");
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.connect();
                    is = connection.getInputStream();
                    BufferedReader theReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                    String reply;
                    while ((reply = theReader.readLine()) != null)
                    {
                            System.out.println(reply);
                            Object obj = parser.parse(reply);
                            JSONObject jsonObject = (JSONObject) obj;
                            String title = (String) jsonObject.get("time");
                            System.out.println(title);
                    }
            }
            catch (Exception e) {
                    e.printStackTrace();
            }
    }

}

这只返回null。谁能告诉我需要改变什么?感谢。

2 个答案:

答案 0 :(得分:5)

如果您阅读JSONObject#get(String)的实际为HashMap.get(String)的javadoc,则说明

  

返回:指定键映射到的值,或 null if   此地图不包含密钥的映射

您的JSON不包含密钥time的映射。

编辑:

如果您的意思是title而不是time,请使用此JSON的摘录

{"schedule":{"service":{"type":"radio","key":"radio1","title":"BBC Radio 1",...

您首先需要schedule作为JSONObject,然后service作为JSONObject,然后title作为正常String值。根据JSON值的类型以不同方式应用它。

答案 1 :(得分:0)

使用JSONGen之类的内容来更好地理解您的数据结构,甚至可以使用google-gson库将数据映射到生成的对象