在某些节点的数组中解析JSON数组但不是全部

时间:2015-05-25 04:50:44

标签: java android json

我有一个JSON响应,我想解析嵌套的json数组。

它是一个非常直接的JSON响应,但稍有改动。 我得到的响应结构为JSONarray,该数组中包含少量值。在某些元素中,该值包含嵌套的JSONarray并具有另一组数据。

现在,解析这个JSON非常简单,我能够以正确的顺序恢复数据。

这是JSON的一个示例(如果格式不正确,则道歉 - 仅作为示例):

{
    "responseCode": "200",
    "responseMessage": "OK",
    "value_set": 
               [
                   {
                       "sample": "value",
                       "sample1": "value1",
                       "sample2": "value2",
                       "sample3": "value3",
                       "sample4": "value4",
                       "sample5": "value5"
                    },
                    {
                        "sample": "value",
                        "sample1": "value1",
                        "sample2": "value2",
                        "sample3": "value3",
                        "sample4": "value4",
                        "sample5": "value5"
                     },
                     {
                        "sample": "value",
                        "sample1": "value2",
                        "new_sample_data": 
                                         [
                                             {
                                                 "abc": "some_value",
                                                 "def": "some_value1",
                                                 "ghi": "some_value2",
                                                 "jkl": "some_value3",
                                                 "unique_data": "some_unique_value"
                                              },
                                         ],
                     },
                     {
                         "sample": "value",
                         "sample1": "value1",
                         "sample2": "value2",
                         "sample3": "value3",
                         "sample4": "value4",
                         "sample5": "value5"
                      },
                 ],
}

现在,为了解析整个事情,这就是我接近的方式:

JSONArray jsonArray = responseObject.getJSONObject().getJSONArray("value_set"); 

for(int i=0;i<jsonArray.length();i++){

    JSONObject object = jsonArray.getJSONObject(i);

    if(object!=null){

    String sampleString = object.getString("sample");
    String sampleString1 = object.getString("sample1");

    //Till this point, the values are ok.    

}

} 

我遇到的问题是包含new_sample_data数组的节点。我想获取该特定节点的值。如果 所有 其他节点都有new_sample_data节点,我会发现这很容易。

但是,正如您所看到的,值sample<X>位于每个节点中,但只有一些节点(在示例中,只有一个节点)具有附加数据。

我认为这可以通过对第一个节点响应进行一些空检查然后解析该特定数组来解决,但这是我被困住的地方,任何帮助都会非常感激。

此时请不要推荐任何库。

4 个答案:

答案 0 :(得分:2)

因为在new_sample_data JSONArray的每个JSONObject中都没有JSONArray value_set

使用JSONObject.has()JSONObject.isNull()检查当前JSONObject中是否有new_sample_data密钥。如果可用,那么从new_sample_data JSONArray获取所有值的方式与当前对value_set JSONArray相同:

if(object.has("new_sample_data")){
            if(!object.isNull("new_sample_data")){
               // get JSONObject's from JSONArray
            }
}

答案 1 :(得分:1)

您可以使用has JSONObject方法执行此操作 例如。 :

if(object.has("new_sample_data")){
            //do something  
}

答案 2 :(得分:1)

JSONArray jsonArray = responseObject.getJSONObject().getJSONArray("value_set"); 

for(int i=0;i<jsonArray.length();i++){

JSONObject object = jsonArray.getJSONObject(i);

if (object.length == 6){

    if(object!=null){

        String sampleString = object.getString("sample");
        String sampleString1 = object.getString("sample1");
        ....
    }

}
else{
    if(object!=null){

    String sampleString = object.getString("sample");
    String sampleString1 = object.getString("sample1");
    //parse array new_sample_data
    }

//Till this point, the values are ok.    

}

} 

答案 3 :(得分:0)

如果此格式已修复,则必须将条件设为

    JSONArray jsonArray = responseObject.getJSONObject().getJSONArray("value_set"); 

for(int i=0;i<jsonArray.length();i++){

    JSONObject object = jsonArray.getJSONObject(i);

    if(object!=null){

    String sampleString = object.getString("sample");
    String sampleString1 = object.getString("sample1");

if(i==2) {
JSONArray jsonArrayNewSampleData = responseObject.getJSONObject().getJSONArray("new_sample_data"); 
}
    //Till this point, the values are ok.    

}

}