【问题标题】:Json array inside array retrieve values Android数组内的Json数组检索值Android
【发布时间】:2016-01-28 11:40:00
【问题描述】:

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

这是 JSON 代码,我用 jsonlint.com 验证了 JSON 代码,它显示 JSON 是 Validate,

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

我试图从 3 小时内得到这个,但没有运气。我是 JSON 新手,不知道 JSON 是如何工作的,还阅读了 GSON 库 以获取 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);
            }

我关注了这个问题,但很幸运: How to parse JSON Array inside another JSON Array in Android

如果有人建议,我做错了什么将不胜感激。或者让我知道,我可以在哪里获得有关 json 的更多信息

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

【问题讨论】:

  • 我 JSONArray 创建另一个 JSONObject 并通过指定键获取值。

标签: java android arrays json jsonobject


【解决方案1】:

这里:

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

因为解析jsonObjJSONArray所以不需要创建新的JSONArrayJSONObject来从jsonObj中提取它。删除以上三行。

banner JSONArrayJSONObject 内部,由jsonObj JSONArray 包含,获取为:

   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 对其进行迭代。

【讨论】:

  • jsonObj 是一个误导性的名称。出于可读性原因,应将其重命名为 jsonArray :) +1 为您提供简洁的答案
  • codeimage inside banner 如何获得主题值?@ρяσѕρєя K
【解决方案2】:

我假设您可以访问其余的值,所以只发布这个 sn-p。 code=jsonObject.getString("code"); moduletitle=jsonObject.getString("moduletitle"); banner=jsonObject.getJSONArray("banner");

【讨论】:

    【解决方案3】:
    jsonObj =new JSONArray(lib_function.getJSONUrl( jsontags.Top_Banner_JOSN_URLs);
    

    从上面的行你会得到 JSONArray。所以现在循环它并获得横幅 JSONArray.Again 循环bannerArray 并且您将获得图像网址

    【讨论】:

      【解决方案4】:

      如果您想要 json 数组中的“图像”值而不是

      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");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 1970-01-01
        相关资源
        最近更新 更多