1

我正在从我的网站检索 JSON 并尝试在我的 android 应用程序中解析它。这是后端自动生成的 JSON。

每当只上传单个图像时,我都会得到没有数组的图像链接。那是一个单一的字符串。

但是,如果上传的图片不止一张,我会将它们放入一个数组中。(请参阅下面的 JSON)(JSON 无效,因为我删除了一些我不使用的东西)

{
"Reports": [
    {
        "News": {
            "Title": "Big Explosion",
            "Info": "Lorem ipsum news etc here get here etc",
            "field_image": "http://mysite.com/1.jpg"
        }
    },
    {
        "News": {
            "Title": "2nd explosion",
            "Info": "<p>Us a delimited list ws etc here get her</p>\n",
            "field_image": [
                "http://mysite.com/2.jpg",
                "http://mysite.com/3.jpg",
                "http://mysite.com/4.jpg"
                           ]
        }
 ]
}

我正在使用以下代码来检索 JSON。但是,当有多个图像时,我无法单独获取每个字符串。

JSONObject json = jParser.getJSONFromUrl(url);
 if (json != null)
        {
                JSONArray ReportsJsonArray = json.getJSONArray("Reports");
                for (int i = 0; i < ReportsJsonArray.length(); i++)
                {
                    JSONObject c = ReportsJsonArray .getJSONObject(i);
                    JSONObject news= node.getJSONObject("News");

                    String title = node.getString("Title");
                    String info = node.getString("Info");
                    String fieldImage = node.getString("fieldimage");

                    if (fieldImage.charAt(0) == '[')
                    {
                        Log.i("tag", "more than 1 image");
                                                // HOW TO GET THEM

                    } else
                    {
                        Log.i("tag", "single image");
                                               //already have them

                           }
    }

我的代码有效,但将整个数组作为单个字符串获取。(我省略了 try-catch 块以使代码更简单)。

4

3 回答 3

1

我认为您应该使用 google gson jsonreader 或 android jsonreader 可从 android API-11 JSONreader 读取每个令牌,您可以使用函数 peek() 来查看 JSONToken 类型而无需在您的情况下使用它会像这样

主功能

//response from the server
    response = myClient.execute(myConnection);
    Reader streamReader = new InputStreamReader(response
                            .getEntity().getContent());
    JsonReader reader = new JsonReader(streamReader);

reader.beginObject();

    while (reader.hasNext()) {

        String name = reader.nextName();

        if (name.equals("reports")) {
            readReports(reader);
        } else {
            reader.skipValue(); // avoid some unhandle events
        }
    }

reader.endObject();
reader.close();

读取报告功能

private void readReports(JsonReader reader) throws IOException {
    reader.beginArray();
    while(reader.hasNext()) {
    reader.beginObject();
    while (reader.hasNext()) {
        String objectNewsName = reader.nextName();
        if (objectNewsName .equals("News")) {
             readNews(reader);
        } else {
             reader.skipValue();
        }
    reader.endObject();

    }
    reader.endObject();
}

阅读新闻功能

private void readNews(JsonReader reader) throws IOException {
    reader.beginObject();
    while(reader.hasNext()) {
        String objectNewsDataName = reader.nextName();
        if (objectNewsDataName .equals("Title")) {
             Log.d("NEWS",reader.nextString());
        } else if (objectNewsDataName .equals("Info")) {
             Log.d("NEWS",reader.nextString());
        } else if (objectNewsDataName .equals("field_image")) {
             if(reader.peek() == JsonToken.BEGIN_ARRAY) {
                 readFieldImage(reader);
             } else {
                 Log.d("NEWS",reader.nextString());
             }
        }else {
             reader.skipValue();
        }
    }
    reader.endObject();
}

readFieldImage 函数

private void readFieldImage (JsonReader reader) throws IOException {
        reader.beginArray();
        while(reader.hasNext()) {
           Log.d("NEWS",reader.nextString());  //you will get the field image array content here
        }
    }

我希望我的回答足够清楚,但是如果您对我的回答有任何疑问,请随时在评论中提问:)

于 2013-03-20T17:25:37.020 回答
0

你试过这个:

....
String title = node.getString("Title");
String info = node.getString("Info");
JSONArray fieldImageArray = node.getJSONArray("fieldimage");
//iterate fieldImageArray here
....
于 2013-03-20T17:09:18.557 回答
0

试试这样

List<String> url= new ArrayList<String>();

     JSONArray field_image= news.getJSONArray("field_image");
    for (int i = 0; i < field_image.length(); i++) {
        url.add(field_image.get(i).toString());//adding to List
    }
于 2013-03-20T17:10:56.797 回答