【问题标题】:Parsing JSON data in Java在 Java 中解析 JSON 数据
【发布时间】:2013-12-09 12:23:32
【问题描述】:

我想从这个页面解析一些数据: 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();
            }
    }

}

这只是返回空值。谁能告诉我我需要改变什么?谢谢。

【问题讨论】:

  • 您的 JSON 中似乎没有名称为 time 的 JSON 对象。
  • 对不起,这是我的错误,时间意味着标题
  • 您还假设每一行都是有效的 json 对象。我不确定结果是如何从服务器返回的。但是,如果对象被拆分为多行(这是有效的 json),您的代码将会中断
  • 名称为 title 的 JSON 对象是嵌套的。您需要获取它之上的每个级别(包含它)才能检索它。

标签: java json api parsing


【解决方案1】:

如果您阅读 JSONObject#get(String) 的 javadoc,它实际上是 HashMap.get(String),它会说明

返回:指定键映射到的值,如果是 null 此映射不包含键的映射

您的 JSON 不包含键 time 的映射。

编辑:

如果您的意思是 title 而不是 time,请提取 JSON 格式

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 虽然这很有帮助,但并不能真正回答他的问题
    • 很明显“时间”字段不存在,问题是那里有什么,我认为生成java对象将帮助他更好地理解可用字段是什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多