【问题标题】:Trying to retrieve json value from json object in Android Studio尝试从 Android Studio 中的 json 对象中检索 json 值
【发布时间】:2021-11-01 14:27:18
【问题描述】:

我无法使用 Android Studio 检索“callingCodes”数组中的值。我的代码似乎正确,但我仍然有错误消息。

这是json文件:

[
  {
    "isoName": "AF",
    "name": "Afghanistan",
    "currencyCode": "AFN",
    "currencyName": "Afghan Afghani",
    "currencySymbol": "؋",
    "flag": "https://s3.amazonaws.com/rld-flags/af.svg",
    "callingCodes": [
      "+93"
    ]
  },
  {
    "isoName": "AL",
    "name": "Albania",
    "currencyCode": "ALL",
    "currencyName": "Albanian Lek",
    "currencySymbol": "Lek",
    "flag": "https://s3.amazonaws.com/rld-flags/al.svg",
    "callingCodes": [
      "+355"
    ]
  },
  {
    "isoName": "DZ",
    "name": "Algeria",
    "currencyCode": "DZD",
    "currencyName": "Algerian Dinar",
    "currencySymbol": "د.ج.‏",
    "flag": "https://s3.amazonaws.com/rld-flags/dz.svg",
    "callingCodes": [
      "+213"
    ]
  }
]

这是我的 java android studio 代码:

JSONArray jsonArray = new JSONArray(response);

                        for(int i = 0; i < jsonArray.length(); i++){
                            JSONObject data = jsonArray.getJSONObject(i);
                            String call = (String) data.getJSONArray("callingCodes").get(0);

                            countryOperatorList.add(new CountryOperator(
                                    data.getString("isoName"),
                                    data.getString("name"),
                                    data.getString("currencyCode"),
                                    data.getString("currencyName"),
                                    data.getString("currencySymbol"),
                                    data.getString("flag"),
                                    call

                            ));
                        }

我尝试将键“callingCode”转换为字符串,但它返回为 ["+93"] 但我只想恢复 '+93'。

但是当我尝试上面的代码时,我收到了这个错误消息:

W/System.err: org.json.JSONException: Index 0 out of range [0..0)

这行代码抛出了什么:

String call = (String) data.getJSONArray("callingCodes").get(0);

有没有人有解决方案,以便我可以检索到调用代码键的值。

谢谢!

【问题讨论】:

    标签: java android json


    【解决方案1】:

    我在你的代码上改变了这个,我建议你使用它来获得价值 如果未找到密钥,则此使用的 optJSONArray 或 optString 返回 null 我的 sn-p 代码是

    try {
      JSONArray array = new JSONArray(response);
      for(int i = 0; i < array.length(); i++){
        JSONObject data = array.getJSONObject(i);
        JSONArray jsr =  data.optJSONArray("callingCodes");
        String call=null;
        if (jsr!=null&&!jsr.isNull(0)){
         // Log.e("value",jsr.optString(0));
          call = jsr.optString(0)
          }
       
       countryOperatorList.add(new CountryOperator(
                                    data.getString("isoName"),
                                    data.getString("name"),
                                    data.getString("currencyCode"),
                                    data.getString("currencyName"),
                                    data.getString("currencySymbol"),
                                    data.getString("flag"),
                                    call
    
                            ));
      }
    
    } catch (Exception e) {
      e.printStackTrace();
    }
    

    【讨论】:

    • 非常感谢兄弟,它成功了,这正是我想要的
    【解决方案2】:

    您自己进行解析有什么特别的原因吗?您不能将 Json 与对象一起使用吗?该示例使用Gson

    类似(示例代码在 Kotlin 中):

    val data = Gson.fromJson(yourJsonString, List<YourJsonObject>)
    
    data class YourJsonObject(
       val isoName: String,
       val name: String, 
       val name: String, 
       val currencyCode: String, 
       val currencyName: String, 
       val currencySymbol: String, 
       val flag: String, 
       val callingCodes: List<String>
    )
    

    Java 示例:

    List<YourJsonObject> data = Gson.fromJson(yourJsonString, List<YourJsonObject>)
    
    public class YourJsonObject {
       private String isoName;
       private String name;
       private String currencyCode;
       private String currencyName;
       private String currencySymbol;
       private String flag;
       private List<String> callingCodes;
    }
    

    【讨论】:

    • 感谢您的回复,但我没有使用 Kotlin,我使用的是 JAVA。这个 json api 文件对于 app 来说非常重要。问题来自“callingCodes”,它是一个包含没有键的字符串数组的键。如果这个表包含一个键,我就不会有这个问题。
    • Java也可以,只是一个类,我用一个例子更新一下
    • @HorlyAndelo 我已经更新了,请看一下,在 callingCodes 节点内有一个字符串列表应该很好,然后一旦你有了你的对象,你就可以正常访问列表了object.callingCodes.get(0)
    【解决方案3】:

    您的代码确实有效,但如果callingCodes 不为空。你必须确定callingCodes.length &gt; 0 调用array.get(0) 方法。

    您可以使用array.optString(0),如果callingCode 不存在,它将返回一个空字符串。

    【讨论】:

    • 我试过了,但是没有用。非常感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多