使用null值处理jsonarray

时间:2016-04-02 10:38:39

标签: android json

以下是我的json数组的一部分

{
  "format_file_name": [
    "/client/compliance_format/payment_of_bonus_act_1965-ce32ec0ee2b94f819ffd2ffdb95ba439.pdf"
  ]
}

这是我解析它时代码的一部分,

 JSONArray format_file_name = innerJobj.getJSONArray("format_file_name");
                    if (format_file_name != null) {
                        for (int k = 0; k < format_file_name.length(); k++) {
                            JSONObject jsonObject1 = format_file_name.getJSONObject(i);
                            Iterator<String> keys = jsonObject1.keys();
                            while (keys.hasNext()) {
                                file = jsonObject1.getString(keys.next());

                            }
                        }
                    }

有些时候format_file_name的值可能是null

在我的代码中,我已经检查过它是null,如果它不是null,那么我解析它并将它分配给一个名为file的字符串

问题是,

  1. 当我试图解析空值的json数组时,我得到了Value null at format_file_name of type org.json.JSONObject$1 cannot be converted to JSONObject。只有在其值不等于null时才能解析它?
  2. 为什么我的代码无法正常工作,虽然我已经检查了null的条件并仅在它不为空时解析它?

3 个答案:

答案 0 :(得分:4)

您可以使用JSONObject的isNull方法。

if(!innerJobj.isNull("format_file_name"))
{
      //your rest of codes
}

答案 1 :(得分:2)

尝试使用array.length()方法。

JSONArray format_file_name = innerJobj.getJSONArray("format_file_name");
                        if (format_file_name.length() >0) {
                            for (int k = 0; k < format_file_name.length(); k++) {
                                JSONObject jsonObject1 = format_file_name.getJSONObject(i);
                                Iterator<String> keys = jsonObject1.keys();
                                while (keys.hasNext()) {
                                    file = jsonObject1.getString(keys.next());

                                }
                            }
                        }

答案 2 :(得分:1)

如果您查看getJSONArray方法的文档:

  

返回按名称映射的值(如果存在)并且是JSONArray,或者   否则抛出。

因此,如果数组为null,则抛出异常,而不是使用getJSONArray,而是使用另一个版本:optJSONArray

  

返回按名称映射的值(如果它存在且是JSONArray)或null   否则。

它返回null而没有异常,所以你可以通过null检查来处理它,试试这个:

JSONArray format_file_name = innerJobj.optJSONArray("format_file_name");
                    if (format_file_name != null) {
                        for (int k = 0; k < format_file_name.length(); k++) {
                        JSONObject jsonObject1 = format_file_name.optJSONObject(k);
                        ...
                        }
                    }