【问题标题】:Android : JSONArray[0] is not a JSONObjectAndroid:JSONArray[0] 不是 JSONObject
【发布时间】:2013-03-17 18:45:34
【问题描述】:

我在 Android 中有一个项目,这里有我需要解析的 JSON,以便我可以使用数据:(我尝试在 JSONLint.com 验证我的 JSON,一切都很好)

{
    "traces": [
        "{\"lat\": \"42.842097\", \"lng\": \"-31.258422\", \"idTrace\": \"444e8079\"}",
        "{\"lat\": \"56.842097\", \"lng\": \"-73.258422\", \"idTrace\": \"088b591a\"}"
    ]
}

问题是当我尝试在 JSONArray 中获取 2 个 JSONObjects 时总是出错。

这是我的代码的 sn-p:

     (...)

     StringBuilder builder = new StringBuilder();

     for (String line = null; (line = reader.readLine()) != null;) 
     {
          builder.append(line).append("\n");
     }


    JSONObject result = new JSONObject(builder.toString());
    JSONArray list = result.getJSONArray("traces");


    try{
        for (int i = 0; i < list.length(); i++)
            {     //this is where I get the error "JSONArray[0] is not a JSONObject"
              JSONObject jsonObject = list.optJSONObject(i); 


              //String id = jsonObject.getString("idTrace");
              //String lat = jsonObject.getString("lat");
              //String lng = jsonObject.getString("lng");

                 (...)
             }
      (...)

我进行了很多搜索以找出问题所在,但人们似乎在做与我完全相同的事情......我找不到它不起作用的原因!

感谢您的帮助!

【问题讨论】:

  • 尝试list.optJSONObject(i); 而不是liste.optJSONObject(i);
  • 循环中有错字。仅仅是输入问题还是您的实际代码?
  • 我打错了,对不起,问题依旧

标签: android arrays json object


【解决方案1】:

此 JSON 是否来自您控制的 API?我认为造成问题的是 JSONArray 中项目周围的引号 - JSON 应该如下所示:

{"traces": [
    {"lat": "42.842097", "lng": "-31.258422", "idTrace": "444e8079"},
    {"lat": "56.842097", "lng": "-73.258422", "idTrace": "088b591a"} 
]}

请注意,每个 JSONObject 周围没有引号。你现在拥有的更像是一个字符串数组......

【讨论】:

  • 其实,我是从我在 python 中创建的 Web 服务生成这个 JSON 的。我可以告诉你我是如何进行的:
  • for animal in animals.all(): data = {'idTrace' : str(animal.uuid), 'lat': str(animal.latitudeOrigine), 'lng': str(animal. longitudeOrigine)} struct_finale['traces'].append(json.dumps(data)) pass return HttpResponse(json.dumps({'traces' : struct_finale['traces']}), content_type="application/json")
  • 我看看能不能去掉python中的所有引号
  • 好吧,你需要在你的键和值周围加上引号......而不是在数组的每个元素周围
  • 是的,我知道你的意思,我从来没有注意到它实际上是这样出现的:“{\”lat\": ...我相信这可能是问题!谢谢!
【解决方案2】:

这是你的打字错误,

liste.optJSONObject(i); this should be list.optJSONObject(i);

【讨论】:

  • 不,对不起,我打错了,这不是问题,但谢谢!我刚刚编辑了它
  • 这并不能解决问题,getJSONObject 和 optJSONObject 的区别在于它返回 null 而不是“崩溃”并停止应用程序
  • @user2179985 您是否收到任何异常或日食显示警告...?
  • 用上面的代码很难找到问题,因为一切似乎都很好。因此,发布您的所有代码,以便我们确定其中是否有任何错误..
  • 应用程序每次点击“JSONObject jsonObject = list.optJSONObject(i);”行,就会进入异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2018-06-05
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多