3
   [
    {
        "name":           "The Universe & The Earth"
      , "imagename":      "cat1.jpg"
      , "active":         "Y"
      , "createdon":      "1901-01-01"
      , "lastmodifiedon": "1901-01-01 00:00:00"
      , "description":    "Knowledge of Earth location in the universe has been shaped by 400 years of telescopic observations, and has expanded radically in the last century.\n"
      , "id":             "1"
    }
  , {
        "name":           "Life on Earth"
      , "imagename":      "cat2.jpg"
      , "active":         "Y"
      , "createdon":      "1901-01-01"
      , "lastmodifiedon": "1901-01-01 00:00:00"
      , "description":    "Over the last 3.7 billion years or so, living organisms on the Earth have diversified and adapted to almost every environment imaginable."
      , "id":             "2"
    }
]

这是我的 json 值。现在我想在自定义列表视图中解析和显示我该怎么做?我关注了http://www.androidhive.info/2012/01/android-json-parsing-tutorial/这是链接但无法实现。我怎样才能做到这一点?谁能告诉我?提前致谢。

4

5 回答 5

10

这是一个 JSONArray 而不是 JSONObject - 要从中创建一个 JSONObject,请使用

JSONObject jsonObject = jsonArray.getJSONObject(0);

这将从此 JSONArray 中获取第一个 JSONObject。

如果你有多个 JSONObjects,使用这个:

JSONObject jsonObject;
for(int n = 0; n < jsonArray.length(); n++)
{
    jsonObject = jsonArray.getJSONObject(n);
}

要获取值:

jsonObject.getString("name");
于 2013-07-12T10:45:02.743 回答
3

试试下面的代码。

JSONArray jArr = new JSONArray(your_json_string);

for (int count = 0; count < jArr.length(); count++) {
    JSONObject obj = jArr.getJSONObject(count);
    String name = obj.getString("name");
    String imageName = obj.getString("imagename");
    //so on
}
于 2013-07-12T10:47:07.677 回答
1

首先我创建了解析器类 JSONParser.java

package com.example.myparse;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;

public class JSONParser {

static InputStream is = null;
static JSONArray jarray = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONArray getJSONFromUrl(String url) {

       StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {
          HttpResponse response = client.execute(httpGet);
          StatusLine statusLine = response.getStatusLine();
          int statusCode = statusLine.getStatusCode();
          if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
              builder.append(line);
            }
          } else {
            Log.e("==>", "Failed to download file");
          }
        } catch (ClientProtocolException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }

    // try parse the string to a JSON object
    try {
        jarray = new JSONArray( builder.toString());
        //System.out.println(""+jarray);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jarray;

}
 }

然后像这样在主类中创建一个对象......

 ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); // used to display in list view

 JSONParser jParser = new JSONParser();
 JSONArray json = jParser.getJSONFromUrl(url); // pass your ulr here

 for(int i = 0; i <= json.length(); i++)  // using for loop for parsing
 {
   try 
    {
     JSONObject c = json.getJSONObject(i);
     String name =  c.getString(TAG_NAME);
     String imagename =  c.getString(TAG_IMAGENAME);
     String active =  c.getString(TAG_ACTIVE);
     String createdon = c.getString(TAG_CREATEDON);
     String lastmodifiedon =  c.getString(TAG_LASTMODIFIEDON);
     String description =  c.getString(TAG_DESCRIPTION);
     String id =  c.getString(TAG_ID);

          // If you want to show your parsed value in list view add the values into the array list              

    // creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();

          // adding each child node to HashMap key => value 
          map.put(TAG_NAME, name);
          map.put(TAG_IMAGENAME, imagename);
    map.put(TAG_ACTIVE, active);
    map.put(TAG_CREATEDON, createdon);
    map.put(TAG_LASTMODIFIEDON, lastmodifiedon);
    map.put(TAG_DESCRIPTION, description);
    map.put(TAG_ID, id);
         // adding HashList to ArrayList
   contactList.add(map);
 System.out.println("contactlist---->"+contactList);
}

 catch (JSONException e) 
       {
    e.printStackTrace();
 }
  }

我是这样做的。我得到了正确的输出。祝一切顺利。

于 2013-07-24T11:06:56.270 回答
0

查看 Google 的 GSON。它让您以一种超级简单的方式序列化/反序列化 JSON - http://code.google.com/p/google-gson/ ‎</p>

于 2013-07-12T10:47:18.743 回答
0

您可以简单地使用 Map 来遍历 JSONObject 的所有键和值,

        String jsonString = "[{\"name\":\"The Universe & The Earth\", \"imagename\":\"cat1.jpg\"}, {\"name\":\"Life on Earth\", \"imagename\":\"cat2.jpg\"}]";
        JSONArray array;
        try {
            array = new JSONArray(jsonString);
            JSONObject object;
            Map<String,String> map;
            for (int i = 0; i < array.length(); i++) {
                object = new JSONObject(array.getJSONObject(i).toString());
                map = new HashMap<String,String>();
                Iterator<?> iter = object.keys();
                while(iter.hasNext()){
                    String key = (String)iter.next();
                    String value = object.getString(key);
                    map.put(key,value);
                }
                System.out.println(map.toString());
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
于 2013-07-12T10:57:44.680 回答