我正从我的网站检索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。 但是,当存在多个图像时,我无法单独获取每个String。
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块以使代码更简单。)
答案 0 :(得分: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();
readReports函数
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();
}
readNews功能
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
}
}
我希望我的答案足够明确,但如果您对我的答案有疑问,请随时在评论中提问:)
答案 1 :(得分:0)
....
String title = node.getString("Title");
String info = node.getString("Info");
JSONArray fieldImageArray = node.getJSONArray("fieldimage");
//iterate fieldImageArray here
....
答案 2 :(得分: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
}