0

遇到不知道如何处理的情况。

我有来自服务器的 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 声明为字符串。这显然是抛出一个强制转换异常(将数组转换为字符串?)。

我期待 JSONObject 将其作为字符串读取,然后从那里将其转换为数组,但似乎并没有那样做。

如何动态处理字符串或数组?如果它是一个数组,我需要分解它。

我正在将此应用程序从 IOS 移植到 android,IOS 中有一个“id”对象可以是任何类。我检查该类是 NSSTring 还是 NSArray 并从那里获取它。在Java中,我不确定如何处理它。

任何建议都非常感谢

4

5 回答 5

1

如果您的 JSON 数组为空,它将是这样的:

"post_content": []

然后它将保持一个数组,具有 0 大小的特殊性。

然后我建议您直接将您的 JSON 数组解析为适当的数据结构,无论大小如何,例如 ArrayList>。然后,您将能够浏览 JSON 数组的所有项目,并为每个项目在 arraylist 中添加一个新的 HashMap。每个哈希图都将包含成对的键值。

但是,如果我很好地理解了您的 JSON,它似乎总是一个由三个元素组成的数组,第三个元素本身就是一个数组,其大小由属性 images_count 给出。这不是很好,您的 JSON 结构应该是:

"post_content": {
    "text": "",
    "images": [
        "https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash4/227408_475848819113499_663318592_n.jpg"
    ]
}

由于 images 是一个数组,因此您可以轻松获取其大小。

于 2012-10-05T09:53:17.547 回答
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");
}
于 2012-10-05T10:06:00.763 回答
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。

于 2012-10-05T09:58:04.153 回答
0

JSONObject具有调用的函数has(String key),该函数检查是否存在键的映射以及isNull(String key)检查特定键是否为null. 在阅读之前使用这些来检查密钥。

于 2012-10-05T09:53:29.170 回答
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.
}
于 2012-10-05T09:54:31.633 回答