java - 构建 JSONArray

标签 java json

我认为在这种情况下,一段代码比数千个解释更好:

我的代码:

ArrayList<String[]> req = new ArrayList<String[]>(DAO.getInstance().dropList(request.getParameter("rname")));
JSONObject j = new JSONObject();
JSONArray m = new JSONArray();
for(String[] s : req){
    try{
        j.put("id",s[0]);
        j.put("name",s[1]);
        m.put(j);
        System.out.println("id and name from DAO : " + s[0] + " " + s[1]);
        System.out.println("JSON object : " + j);
        System.out.println("JSON array : " + m);
    }catch (Exception e){}
}

控制台:

id and name from DAO : 1 Bob Sinclar
JSON object : {"id":"1","name":"Bob Sinclar"}
JSON array : [{"id":"1","name":"Bob Sinclar"}]
id and name from DAO : 2 Kurt Cobain
JSON object : {"id":"2","name":"Kurt Cobain"}
JSON array : [{"id":"2","name":"Kurt Cobain"},{"id":"2","name":"Kurt Cobain"}]
id and name from DAO : 3 AAA AAcc
JSON object : {"id":"3","name":"AAA AAcc"}
JSON array : [{"id":"3","name":"AAA AAcc"},{"id":"3","name":"AAA AAcc"},{"id":"3","name":"AAA AAcc"}]
id and name from DAO : 4 Bruce Wayne
JSON object : {"id":"4","name":"Bruce Wayne"}
JSON array : [{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"},{"id":"4","name":"Bruce Wayne"}]
id and name from DAO : 5 Tyler Dordon
JSON object : {"id":"5","name":"Tyler Dordon"}
JSON array : [{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"},{"id":"5","name":"Tyler Dordon"}]

正如您所看到的,它不是添加新元素,而是用最后一个条目替换所有元素,就像我添加指向 JSONObject 的指针而不是其内容一样......

大家有什么想法吗?

最佳答案

在循环内初始化您的JSONObject

for(String[] s : req){
    try{
        JSONObject j = new JSONObject();
         ...

...否则,您将更新对 JSONObject 的引用,并将其再次添加到 JSONArray 中,从而添加同一 JSONObject 的多个副本。

在序列化 JSONObjectJSONArray 之前,它们的行为类似于普通的 Java Object,只要通过在同一引用上调用的方法进行的更改就会应用于同一实例。

因此,序列化后,您将在 JSONArray 中获得最后更新的 JSONObject 的多个副本。

关于java - 构建 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655979/

相关文章:

java - 跨多个微服务的 2PC 分布式事务?

java - Spring security 重叠 URL 范围

json - golang json如何解码不同元素数据类型的二维数组

arrays - 如何使用 SwiftyJSON 将 JSON 数组转换为数组

java - 错误: Failed to resolve: android.支持:support. v7 :29. 0.2

java - 如何使用 Maven "shade"插件将 Apache CXF 应用程序打包成一个整体 JAR

java - Xlet(javax.microedition.xlet)开发的启动步骤是什么?

asp.net - 向所有 WebApi 的响应添加额外的 json 结构?

php - 如何使用 JSON 更新 PHP 中的 MYSQL 表

PHP JSON 到 JavaScript 数组