我是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);
答案 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));