【问题标题】:how to convert List<object> into org.json.JSONArray?如何将 List<object> 转换为 org.json.JSONArray?
【发布时间】:2018-02-19 16:18:41
【问题描述】:

我是 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" 是 string[] 所以这将返回 [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);

【问题讨论】:

  • 尝试删除 ""+ 部分,您不需要将内容转换为字符串
  • 你可以使用obj.put("business_images", Arrays.toString(business_images) );

标签: java android json list


【解决方案1】:

由于数组是 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));

【讨论】:

  • 对不起,我的回复迟了,但根据你的建议,我得到了值,但在单个字符串中我的意思是我得到了字符串 ("[a,b,c]") 而不是数组([a, b , C])。请帮我得到这种数组
【解决方案2】:
 ObjectMapper mapper = new ObjectMapper();
   System.out.println(mapper.writeValueAsString(list));

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请包括对您的代码的解释,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因
  • @BalagurunathanMarimuthu 谢谢你下次教我,我记得这个
猜你喜欢
  • 2023-03-08
  • 2017-04-07
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2019-02-03
相关资源
最近更新 更多