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 中是否可以? “出现错误” 什么错误?请编辑问题并显示您遇到的错误。我们甚至不知道您是在谈论编译错误还是运行时错误。 猜想,EmpListEmpData 的奇怪混合导致了编译错误。 --- 仅供参考: 局部变量名称应以小写字母开头,即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 的 dataArrayJSONArray 的一个实例,这就是他们所说的错误,尽管没有提供编译时/运行时错误。 @fluffy 如果dataArrayJsonArray,则代码的工作方式完全相同,例如作为JsonArray dataArray = gson.fromJson(json, JsonArray.class); 的结果,其中json 是此答案中显示的dataArray 字符串。 不,Gson 及其Gson.fromJson 方法重载系列不能与org.json.JSONArray 一起使用(因为它出现在问题中)。无论如何,这个问题还不清楚,OP 也没有转而澄清它。 @fluffy 为什么你认为 OP 正在混合来自不同 JSON 库的类?如果dataArraycom.google.gson.JsonArray,它可以正常工作。鉴于问题中没有大小写,“jsonarray”可以是类,也可以只是对[ ] JSON Array 文本字符串的引用,如this answer所示。我认为你在这里做的假设比我多。 @fluffy 你说得对,我正在阅读问题,OP 说jsonarray。我没有注意到标题中JSONArray 的替代大小写。当然,如果 OP 只是像我们要求的那样发布错误,这可能会更快地解决。

以上是关于Android 中的 JSONArray 到 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

Android中的JSONObject和JSONArray的使用

Kotlin:遍历 JSONArray

android 中JSONArray怎么用

如何在 kotlin Android 中访问更大的 jsonArray json 中的 json 数组中的字符串

jsonobject无法转换为jsonarray android studio

安卓。如何解析 JsonArray 中的 JsonArrays