Android 中的 JSONArray 到 ArrayList
Posted
技术标签:
【中文标题】Android 中的 JSONArray 到 ArrayList【英文标题】:JSONArray to ArrayList in Android 【发布时间】:2021-07-16 00:59:48 【问题描述】:我从服务器“dataArray”得到如下jsonarray:
["FirstNmae":"xyz","BranchId":"asd","Location":"qwe"]
现在我想使用 Gson 创建 ArrayList<EmpData>
列表,其中 EmpData
是普通的 Pojo 类。下面是我的代码出错了
TypeToken<List<EmpData>> token = new TypeToken<List<EmpData>>() ;
List<EmpData> empList = gson.fromJson(dataArray, token.getType());
【问题讨论】:
我正在尝试在没有任何循环的情况下执行此操作,在 android 中是否可以? “出现错误” 什么错误?请编辑问题并显示您遇到的错误。我们甚至不知道您是在谈论编译错误还是运行时错误。 猜想,EmpList
和 EmpData
的奇怪混合导致了编译错误。 --- 仅供参考: 局部变量名称应以小写字母开头,即empList
,而不是EmpList
。 --- 看起来可疑的是第一行中的EmpList
。
那个 EmpList 输入错误它是 empList... 并纠正了我在我的问题中的错误.... 你有这个问题的任何解决方案吗?
如果您可以使用 Gson 直接从响应反序列化,为什么要将响应转换为 JSONArray
?
【参考方案1】:
不是答案,但作为答案包含在内以显示格式化代码。
无法重现。这是一个Minimal, Reproducible Example,基于问题中的信息,它运行良好。
为简单起见,代码使用公共字段。真正的代码可能会使用私有字段和 getter/setter 方法,但由于 POJO 不是问题,所以我保持简单。
Gson gson = new Gson();
// Code from question starts here
String dataArray = "[\"FirstNmae\":\"xyz\",\"BranchId\":\"asd\",\"Location\":\"qwe\"]";
TypeToken<List<EmpData>> token = new TypeToken<List<EmpData>>() ;
List<EmpData> empList = gson.fromJson(dataArray, token.getType());
// Code from question ends here
System.out.println("dataArray = " + dataArray);
System.out.println("empList = " + empList);
class EmpData
@SerializedName("FirstNmae")
public String firstName;
@SerializedName("BranchId")
public String branchId;
@SerializedName("Location")
public String location;
@Override
public String toString()
return "EmpData[firstName=" + this.firstName +
", branchId=" + this.branchId +
", location=" + this.location + "]";
输出
dataArray = ["FirstNmae":"xyz","BranchId":"asd","Location":"qwe"]
empList = [EmpData[firstName=xyz, branchId=asd, location=qwe]]
注意@SerializedName
注释如何用于处理名称中的拼写错误 (FirstNmae
),以及名称中第一个字母的大写/小写问题。
【讨论】:
我相信 OP 的dataArray
是 JSONArray
的一个实例,这就是他们所说的错误,尽管没有提供编译时/运行时错误。
@fluffy 如果dataArray
是JsonArray
,则代码的工作方式完全相同,例如作为JsonArray dataArray = gson.fromJson(json, JsonArray.class);
的结果,其中json
是此答案中显示的dataArray
字符串。
不,Gson 及其Gson.fromJson
方法重载系列不能与org.json.JSONArray
一起使用(因为它出现在问题中)。无论如何,这个问题还不清楚,OP 也没有转而澄清它。
@fluffy 为什么你认为 OP 正在混合来自不同 JSON 库的类?如果dataArray
是com.google.gson.JsonArray
,它可以正常工作。鉴于问题中没有大小写,“jsonarray”可以是类,也可以只是对[ ]
JSON Array 文本字符串的引用,如this answer所示。我认为你在这里做的假设比我多。
@fluffy 你说得对,我正在阅读问题,OP 说jsonarray
。我没有注意到标题中JSONArray
的替代大小写。当然,如果 OP 只是像我们要求的那样发布错误,这可能会更快地解决。以上是关于Android 中的 JSONArray 到 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
Android中的JSONObject和JSONArray的使用
如何在 kotlin Android 中访问更大的 jsonArray json 中的 json 数组中的字符串