首页 > 解决方案 > 尝试从 Android Studio 中的 json 对象中检索 json 值

问题描述

我无法使用 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 工作室代码:

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

有没有人有一个解决方案,以便我可以检索 callingCode 键的值。

谢谢!

标签: javaandroidjson

解决方案


您自己进行解析有什么特别的原因吗?您不能将 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;
}

推荐阅读