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

时间:2017-09-11 12:09:18

标签: java android json list

我是Android开发中的新手,我正试图从Android列表中获取JSONArray。 (我需要一个org.json.JSONArray,所以我无法用Gson做到这一点。)

我试图在SO上找到这个并找到一个很棒的解决方案here

到目前为止,我能够部分地实现这一点(对于字符串和整数值)。但是我的列表中有一个String []值。我怎么能在JSONObject中转换它?

这是我如何实现我的代码来转换JSONArray:

JSONArray jsonArray = new JSONArray();

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

这是我的对象类中的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);

2 个答案:

答案 0 :(得分: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所以您不需要将原语提升为String,但如果您的REST API期望全部为字符串,那么使用String.valueOf来提高性能

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

答案 1 :(得分:0)

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