尝试从 Android Studio 中的 json 对象中检索 json 值
Posted
技术标签:
【中文标题】尝试从 Android Studio 中的 json 对象中检索 json 值【英文标题】:Trying to retrieve json value from json object in Android Studio 【发布时间】: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);
有没有人有解决方案,以便我可以检索到调用代码键的值。
谢谢!
【问题讨论】:
【参考方案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 > 0
调用array.get(0)
方法。
您可以使用array.optString(0)
,如果callingCode 不存在,它将返回一个空字符串。
【讨论】:
我试过了,但是没有用。非常感谢您的回答以上是关于尝试从 Android Studio 中的 json 对象中检索 json 值的主要内容,如果未能解决你的问题,请参考以下文章
尝试从asp.net web api调用获取响应时android studio中的超时异常
如何将值从活动传递到 Android Studio 中的类?
从 Android Studio 中的片段将数据写入 Firebase