2016-01-28 49 views
-1

我试图从JSONArray内部数组中获取值,我能够成功检索整个JSON值到JSONArray但无法检索JSONArray中的值。当我将JSONArray转换为JSONObject以获取存储在JSONArray中的值。它提供了错误:org.json.JSONException: No value for "banner"Json数组内部检索值Android

这里是JSON代码,我验证JSON代码jsonlint.com而事实证明,JSON是验证,

[ 
 
\t {"code":"banner","moduletitle":0, 
 
\t "banner": 
 
\t \t [ 
 
\t \t \t {"image":"http://imageurl"}, 
 
\t \t \t {"image":"http://imageurl"}, 
 
\t \t \t {"image":"http://imageurl"} 
 
\t \t ] 
 
\t \t 
 
\t } 
 
]

余米试图在3小时也没有运气得到这个。我新的JSON,不知道JSON如何实际工作,也读取邻接GSON Library获得JSON值。这里是我的Java代码。

JSONArray jsonObj = null; 
 
      String image_url = ""; 
 
      String banner_code =""; 
 

 
      try { 
 
       jsonObj =new JSONArray(lib_function.getJSONUrl(jsontags.Top_Banner_JOSN_URLs)); 
 
       Log.d("value retrun :","" +jsonObj); 
 
       //---vlaue is coming and print in Log ----// 
 
       
 
      } catch (JSONException e) { 
 
       Log.v("Error in Parser :", " " + e); 
 
       Log.d("no value retrun :", "failed to convert"); 
 
      } 
 

 
      try{ 
 
        JSONObject jo = new JSONObject(); 
 
        JSONArray ja = new JSONArray(); 
 
        // populate the array 
 
        jo.put("arrayName", jsonObj); 
 

 

 
       JSONArray subArray = jo.getJSONArray("banner"); 
 
       image_url= subArray.getString(Integer.parseInt("image")); 
 

 

 
       Log.d("banner code",""+subArray); 
 
      }catch(Exception e) 
 
      { 
 
       Log.d("not working",""+e); 
 
      }

我folllow这个问题,但运气: How to parse JSON Array inside another JSON Array in Android

如果有人建议,我在做错误的将是升值。或让我知道,在哪里我可以得到更多关于JSON的信息

UPDATE谢谢大家给他们宝贵的时间来回答我的愚蠢问题。所有答案都是正确的,但我只能接受一个答案。非常感谢所有

+1

我的JSONArray创建另一个JSONObject的价值和通过指定键获取值。 –

回答

2

这里:

JSONObject jo = new JSONObject(); 
JSONArray ja = new JSONArray(); 
// populate the array 
jo.put("arrayName", jsonObj); 

因为解析jsonObjJSONArray所以没必要创建新JSONArrayJSONObjectjsonObj提取它。删除以上三行。

bannerJSONArray里面JSONObject这是由jsonObjJSONArray载,获得的是:

JSONObject jsonObject=jsonObj.optJSONObject(0); 
    JSONArray subArray = jsonObject.getJSONArray("banner"); 

    // get code key from `jsonObject` 
    String strCode=jsonObject.optString("code"); 

    // get all images urls from `subArray` 
    for(int index=0;index<subArray.length();index++){ 
     JSONObject imgJSONObject=subArray.optJSONObject(index); 
     // get image urls 
     String strImgURL=imgJSONObject.optString("image"); 

    } 

另外,如果jsonObj JSONArray包含多个的JSONObject的,然后使用for-loop迭代它。

+2

'jsonObj'就是这样一个令人误解的名字。这应该被重命名为'jsonArray'出于可读性的原因:) +1为您的简洁的答案 –

+0

**代码**和**图像里面的旗帜**我怎样才能获得主题的价值?@ρяσѕρєяK –

+0

@AshuKumar:看我的编辑答案 –

1

我假设你有剩下的值可以访问给你,所以只发布这个片段。 code=jsonObject.getString("code"); moduletitle=jsonObject.getString("moduletitle"); banner=jsonObject.getJSONArray("banner");

1
jsonObj =new JSONArray(lib_function.getJSONUrl(jsontags.Top_Banner_JOSN_URLs); 

从上面行,你会得到JSONArray。所以,现在环,并让你的旗帜JSONArray.Again循环bannerArray,你会得到的图片网址

+0

最可靠答案! @boyapati –

1

如果你想“形象”,这是JSON arrray比

String response = "your response"; 
try{ 
    JsonArray jAry = new JsonArray(response); 
    JsonObject jObj = jAry.getJsonObject(0); 

    JsonArray jsonBanner = jObj.getJsonArray("banner"); 
    JsonObject temp; 
    for(int i=0;i<jsonBanner.length;i++){ 
     temp = jsonBanner.getJsonObject(i); 
     String image = temp.optString("image"); 
    } 
}