进入一种不确定如何处理它的情况。
我有来自服务器的json数据;例如:(我只是发布json的一部分,所以,是的,json是有效的)
"wall_id": 889149,
"poster_image_thumbnail": "http:\/\/www.mface.me\/images\/avatar\/thumb_62441559ddb1dda7513d0f94.jpg",
"post_type": "profile",
"post_content": [{
"text": "",
"images_count": 1,
"images": ["https:\/\/fbcdn-sphotos-a-a.akamaihd.net\/hphotos-ak-ash4\/227408_475848819113499_663318592_n.jpg"]
}]
创建了一个用于存储此json数据的类
public class feedFormat{
Integer wall_id;
String poster_image_thumbnail;
String post_type;
String post_content;
}
有时 post_content 可以为空,或者数组如上例所示。我在feedFormat中将post_content声明为String。这显然是抛出强制转换异常(将数组转换为字符串?)。
我期待JSONObject将其作为字符串读取,然后从那里将其转换为数组,但似乎没有那样。
如何动态处理字符串或数组?如果它是一个数组,我需要将其分解。
我将这个应用程序从IOS移植到android,在IOS中有一个“id”对象,可以是任何类。我检查这个类是NSSTring还是NSArray并从那里拿走它。在Java中,我不确定如何处理它。
非常感谢任何建议
答案 0 :(得分:1)
如果你的JSON数组是空的,那就是:
"post_content": []
然后它将保持一个数组,具有0大小的特殊性。
然后我建议你直接将你的JSON数组解析成适当的数据结构,无论大小如何,比如ArrayList>例如。然后,您将能够浏览JSON数组的所有项目,并为每个项目在您的arraylist中添加一个新的HashMap。每个hashmap都包含一对键值。
但是,如果我理解你的JSON,它似乎总是一个由三个元素组成的数组,第三个元素本身就是一个数组,其大小由属性images_count给出。这不是很好,你的JSON结构应该是:
"post_content": {
"text": "",
"images": [
"https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash4/227408_475848819113499_663318592_n.jpg"
]
}
由于图像是一个数组,因此您可以很容易地获得它的大小。
答案 1 :(得分:0)
JSONObject
具有名为has(String key)
的函数,用于检查是否存在密钥映射,isNull(String key)
检查特定密钥是否为null
。在阅读之前使用这些来检查密钥。
答案 2 :(得分:0)
您可以像jsonobject.has("post_content")
if(jsonobject.has("post_content")) {
/// read array and do remaining stuff
}else {
// if not read another strings and put post_content as null.
}
答案 3 :(得分:0)
public class FeedFormat{
Integer wall_id;
String poster_image_thumbnail;
String post_type;
JSONArray post_content;
}
feedFormat toto = new feedFormat();
toto.post_content = yourJsonObject.getJsonArray("post_content");
这是做你想做的最简单的方法。另一种方法是创建另一个类。
public class FeedFormat{
Integer wall_id;
String poster_image_thumbnail;
String post_type;
ArrayList<PostContent> post_content = new ArrayList<PostContent>();
}
public class PostContent {
String text;
Integer imageCount;
ArrayList<String> images = new ArrayList<String>();
}
使用它可以将每个帖子内容处理成特定对象,而不是使用JSONObject / JSONArray。
答案 4 :(得分:0)
您可以使用以下内容:
String data= "wall_id": 889149,
"poster_image_thumbnail": "http:\/\/www.mface.me\/images\/avatar\/thumb_62441559ddb1dda7513d0f94.jpg",
"post_type": "profile",
"post_content": [{
"text": "",
"images_count": 1,
"images": ["https:\/\/fbcdn-sphotos-a-a.akamaihd.net\/hphotos-ak-ash4\/227408_475848819113499_663318592_n.jpg"]
}]
JSONArray jArray=data.getJSONArray("post_content");
for(int i=0; i<jArray.length(); i++)
{
JSONObject jObj=jArray.getJSONObject(i);
String text=jObj.getString("text");
int images_count=jObj.getInt("images_count");
String images=jObj.getInt("images");
}