如何将List<object>转换为org.json.JSONArray?

3

我是Android开发的新手,正在尝试从Android List中获取JSONArray。(我需要一个org.json.JSONArray,所以无法使用Gson)。

我已经在Stack Overflow上找到了一个很好的解决方案here

到目前为止,我只能部分地实现(对于字符串和整数值)。但是我的List中有String[]值。如何将其转换为JSONObject?

这是我实现代码转换JSONArray的方式:

JSONArray jsonArray = new JSONArray();

     for (int i = 0; i < modifiedList.size(); i++) {
         jsonArray.put(modifiedList.get(i).getJSONObject());
     }

这是我的Object类中getJSOnObject方法的实现:

public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        try {
            obj.put("chat_id", ""+chat_id);
            obj.put("latest_chat_message", ""+latest_chat_message);
            obj.put("user_id", ""+user_id);
            obj.put("business_id", ""+business_id);
            obj.put("chatting_user_id", ""+chatting_user_id);
            obj.put("latest_chat_fullname",""+ latest_chat_fullname);
            obj.put("latest_chat_user_id", ""+latest_chat_user_id);
            obj.put("chat_title", ""+chat_title);
            obj.put("views", ""+views);
            obj.put("created_on1", ""+created_on1);
            obj.put("created_on",""+ created_on);
            obj.put("chat_image", ""+chat_image);
            obj.put("chat_comment", ""+chat_comment);
            obj.put("chat_notification", ""+chat_notification);
            obj.put("chat_expiry", ""+chat_expiry);
            obj.put("del_in", ""+del_in);
            obj.put("customer_id", ""+customer_id);
            obj.put("customer_fullname", ""+customer_fullname);
            obj.put("customer_photo", ""+customer_photo);
//            obj.put("business_images", business_images);
//            obj.put("user_names", user_names);
            obj.put("isFav", ""+isFav);
//            obj.put("user_images", user_images);
            obj.put("isRead", ""+isRead);

        } catch (JSONException e) {

        }
        return obj;
    }

在这里,“business_images”和“user_names”是字符串[],因此它将返回类似于[Ljava.lang.String;@596ef8d这样的地址值,而不是实际的值,那么问题是如何获取这些值而不是地址?

编辑:

这些解决方案都没有对我起作用,因为Arrays.tostring(String[])返回String而不是String[]

所以for循环解决了我的问题,这是我如何实现的:

JSONArray userNames = new JSONArray();

for (String user_image : user_images) {
                userImages.put(user_image);
            }

obj.put("user_images", userImages);

尝试删除 ""+ 部分,您不需要将事物转换为字符串。 - zapl
你可以使用 obj.put("business_images", Arrays.toString(business_images) ); - Pavneet_Singh
2个回答

2

由于在Java中数组是对象,被视为引用而不是值,因此要获取数组的字符串表示形式,您可以使用Arrays#toString

obj.put("business_images", Arrays.toString(business_images) );

要获取JSONArray,请使用:
obj.put("business_images", new JSONArray(Arrays.toString(business_images)));

由于 JSONObject 支持 int,long,double,boolean 类型,因此您无需将原始数据类型提升为字符串。但是,如果您的 REST API 需要所有参数都作为字符串,则可以使用 String.valueOf 来提高性能效率。

obj.put("chat_id", String.valueOf(chat_id));

抱歉回复晚了,但是根据您的建议,我得到了值,但是它们是以单个字符串的形式出现,也就是说我得到了字符串("[a,b,c]")而不是数组([a, b, c])。请帮助我获取这种类型的数组。 - Hiren Nakrani

0
 ObjectMapper mapper = new ObjectMapper();
   System.out.println(mapper.writeValueAsString(list));

2
虽然这段代码片段可能解决了问题,但它并没有解释为什么或者如何回答这个问题。请在你的代码中包含一个解释,因为这真的有助于提高你的帖子质量。记住,你正在为未来的读者回答问题,而那些人可能不知道你的代码建议的原因。 - Balagurunathan Marimuthu
@BalagurunathanMarimuthu,感谢您教我。下次我一定会记住这个。 - Sandip Solanki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接