Java Android应用程序解析网站上的JSON

Java Android应用程序解析网站上的JSON,java,android,json,Java,Android,Json,好的,那么第一个障碍在几分钟内就被清除了,让我们看看这个如何 正如我在日志中看到的那样,代码从网站中提取JSON数据很好,但现在JSONParser失败了。我认为问题在于JSONObject和JSONArray,但我无法理解这一点 以下是从JSON站点提取的数据,如日志所示: 09-10 09:45:00.175: I/log_tag(785): {"stoker":{"sensors":[{"id":"620000116F01CA30","name":"SS2","al":0,"ta":66,

好的,那么第一个障碍在几分钟内就被清除了,让我们看看这个如何

正如我在日志中看到的那样,代码从网站中提取JSON数据很好,但现在JSONParser失败了。我认为问题在于JSONObject和JSONArray,但我无法理解这一点

以下是从JSON站点提取的数据,如日志所示:

09-10 09:45:00.175: I/log_tag(785): {"stoker":{"sensors":[{"id":"620000116F01CA30","name":"SS2","al":0,"ta":66,"th":75,"tl":65,"tc":66.3,"blower":null},09-10 09:45:00.175: I/log_tag(785): {"id":"E20000116F0CDB30","name":"brskt2","al":0,"ta":203,"th":32,"tl":32,"tc":70.6,"blower":null}],09-10 09:45:00.175: I/log_tag(785): "blowers":[{"id":"37000000119D8B05","name":"party","on":0}]}}
下面是试图解析数据的代码:

            try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                Sensor resultRow = new Sensor();
                resultRow.id = json_data.getString("id");
                resultRow.name = json_data.getString("name");
                resultRow.current = json_data.getString("tc");
                resultRow.target = json_data.getString("ta");
                arrayOfWebData.add(resultRow);
            }
        }
        catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

您不能只使用Java API解析JSON而不指定对象或数组——JSON文档也可以是。因为日志中的数据显示了一个对象,所以您需要在第二行请求一个JSONObject。

您不能在不指定对象或数组的情况下使用Java API解析JSON,JSON文档也可以是。因为日志中的数据显示了一个对象,所以您需要在第二行请求一个JSONObject。

只要日志中的JSON字符串是准确的,就有两件事需要更改。首先,结果是一个包含JSONArray的JSONObject。您必须先创建一个对象,然后从该对象中提取数组。其次,tc和ta在输出中分别显示为double和integer,因此需要进行检索。看起来都是这样的:

    try {
        JSONObject obj = new JSONObject(result);
        JSONObject stoker = obj.getJSONObject("stoker");
        JSONArray jArray = stoker.getJSONArray("sensors");
        for(int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Sensor resultRow = new Sensor();
            resultRow.id = json_data.getString("id");
            resultRow.name = json_data.getString("name");
            resultRow.current = json_data.getDouble("tc");
            resultRow.target = json_data.getInt("ta");
            arrayOfWebData.add(resultRow);
        }
    }
    catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
    }
试试看{
JSONObject obj=新JSONObject(结果);
JSONObject stoker=obj.getJSONObject(“stoker”);
JSONArray jArray=stoker.getJSONArray(“传感器”);
for(int i=0;i

根据提供的JSON字符串,这应该可以工作。为了将来参考,{}中包含的任何内容都是JSONObject,而[]中包含的任何内容都是JSONArray。键/值对中任何第二个带引号的值都可能是字符串,而不带引号的值则作为数字检索。

只要logcat中的JSON字符串是准确的,就有两件事需要更改。首先,结果是一个包含JSONArray的JSONObject。您必须先创建一个对象,然后从该对象中提取数组。其次,tc和ta在输出中分别显示为double和integer,因此需要进行检索。看起来都是这样的:

    try {
        JSONObject obj = new JSONObject(result);
        JSONObject stoker = obj.getJSONObject("stoker");
        JSONArray jArray = stoker.getJSONArray("sensors");
        for(int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Sensor resultRow = new Sensor();
            resultRow.id = json_data.getString("id");
            resultRow.name = json_data.getString("name");
            resultRow.current = json_data.getDouble("tc");
            resultRow.target = json_data.getInt("ta");
            arrayOfWebData.add(resultRow);
        }
    }
    catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
    }
试试看{
JSONObject obj=新JSONObject(结果);
JSONObject stoker=obj.getJSONObject(“stoker”);
JSONArray jArray=stoker.getJSONArray(“传感器”);
for(int i=0;i

根据提供的JSON字符串,这应该可以工作。为了将来参考,{}中包含的任何内容都是JSONObject,而[]中包含的任何内容都是JSONArray。键/值对中任何带引号的第二个值都可能是字符串,而不带引号的值则作为数字检索。

因为数据不是json数组。它是一个JSON对象,带有一个键“stoker”,等等……你能把整个堆栈跟踪放进去吗?这将帮助您了解哪一行抛出异常。因为数据不是json数组。它是一个JSON对象,带有一个键“stoker”,等等……你能把整个堆栈跟踪放进去吗?这将帮助您理解哪一行抛出异常。非常感谢您对对象与数组的详细解释。我认为这就是问题所在,但您的解释以及代码更改帮助我理解了差异。我得到一个JSONException错误,没有找到传感器的数据,但这将是下一次的另一个问题。您应该确保您的JSON字符串有效。是一个优秀的JSON格式化程序和验证工具,可确保数据正确构造。它也完全基于浏览器,无需下载。此外,由于您的整个输出是一个对象,您可能需要先获取“斯托克对象”并获取“传感器”我通过格式化程序网站运行了JSON数据,它是有效的。我一直收到一个错误,没有传感器的数据存在。我认为你是对的,首先需要得到斯托克物体,然后是传感器阵列,但我还没有弄清楚如何使它工作。我真的很感激你能提供的任何帮助,但请理解,如果这个问题在这一点上是死的。我仍在努力,并将提出一个新的问题是需要。再次感谢。@MCeley-非常感谢您更新代码。它工作得很好,你帮助我比昨天理解得多一点。非常感谢你对对象与数组的详细解释。我认为这就是问题所在,但您的解释以及代码更改帮助我理解了差异。我得到一个JSONException错误,没有找到传感器的数据,但这将是下一次的另一个问题。您应该确保您的JSON字符串有效。是一个优秀的JSON格式化程序和验证工具,可确保数据正确构造。它也完全基于浏览器,无需下载。此外,由于您的整个输出是一个对象,因此可能需要对