首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查特定的JSON对象是否可用

检查特定的JSON对象是否可用
EN

Stack Overflow用户
提问于 2012-05-15 12:35:45
回答 3查看 44.8K关注 0票数 15

我有如下JSON文件,它必须被转储到一个ArrayList中:

代码语言:javascript
复制
{
 "main1" : [
  {
     "child1" : valueA,
     "child2" : valueB,
     "child3" : valueC,
  },
  {
     "child1" : value1,
     "child3" : value3,
  },
 ],
 "main2" : "valueMain2"
}

必须检查元素child2是否存在,然后获取该值。您可以看到它没有出现在第二个数组中。

我使用的是Native JSON (org.JSON) Java代码如下:

代码语言:javascript
复制
ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>();
JSONObject json = <my_json_object>;

JSONObject getchild2;

JSONArray jArray = <my_json_object>.getJSONArray("main1");
for(int j = 0; j < jArray.length(), j++){
  HashMap<String,String> map = new HashMap<String,String>();

  map.put("First Value", jArray.getJSONObject(j).getString("child1"));
  map.put("Third Value", jArray.getJSONObject(j).getString("child3"));

  getchild2 = jArray.getJSONObject(j).getJSONObject("child2");
  if(getchild2 == null){
    map.put("Second Value", "Some Dummy Value");
  } else {
    map.put("Second Value", jArray.getJSONObject(j).getString("child2"));
  }
 myList.add(map);
}

我如何才能做到这一点?

<my_json_object>使用原生网址解析,因为我在以下位置获得了网址请求的HTTP响应:http://mobisys.in/blog/2012/01/parsing-json-from-url-in-android/

它不工作,因为错误如下:

代码语言:javascript
复制
E/AndroidRuntime(664): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-16 19:59:34

总之,我通过谷歌搜索得到了解决方案:我把它重新定义为,

代码语言:javascript
复制
 if (!jArray.getJSONObject(j).has("child2")) {
  map.put("Second Value", "N.A");
 } else {
  map.put("Second Value", jArray.getJSONObject(j).getString("child2"));
 }

创建JSONObject getchild2 = jArray.getJSONObject(j).getJSONObject("child2");是不必要的。

这很有效,相当完美!有关更多详细信息,请参阅:Checking if exists subObject in JSON

感谢大家的帮助!

票数 37
EN

Stack Overflow用户

发布于 2012-05-15 13:16:55

代码语言:javascript
复制
getJSONObject("child2");

如果child2不存在,将引发异常。试着这样做:

代码语言:javascript
复制
getchild2 = jArray.getJSONObject(j).optJSONObject("child2");

这样,如果child2不存在,您就不必捕获异常,而是可以检查null。

票数 11
EN

Stack Overflow用户

发布于 2012-05-15 12:54:06

试试这个:

代码语言:javascript
复制
{"main1" : [{
             "id":"1"
               "child1" : "valueA",
               "child2" : "valueB",
               "child3" : "valueC",
            }, {
                "id":"2"
                  "child1" : "value1",
                 "child3"  : "value3",
           }]
}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10594188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档