0

嗨,我是处理 JSON Format Webservices 的新手。我有Json之类的......

{   "meta":{"success":1},

"Countries":
[[{"Id":"1","Name":"Gibraltar",
    "Cities":
    [[{"Id":"21","Name":"Gibraltar"}]]
  },
  {"Id":"2","Name":"Canada",
    "Cities":
    [[{"Id":"22","Name":"Toronto"},
          {"Id":"39","Name":"Banff"}]]
  },
      {"Id":"4","Name":"Malta",
    "Cities":
    [[{"Id":"37","Name":"Valletta"}]]
  },
      {"Id":"51","Name":"Italy",
    "Cities":
    [[{"Id":"24","Name":"Sardinia"}]]
  },
  {"Id":"53","Name":"England",
    "Cities":
    [[{"Id":"23","Name":"London"},
      {"Id":"38","Name":"Guildford"},
      {"Id":"43","Name":"Petersfield"},
          {"Id":"44","Name":"Isle of Wight"}]]
  },
  {"Id":"175","Name":"Hungary",
    "Cities":
    [[{"Id":"36","Name":"Budapest"}]]
  }
]]
}

但是我无法在解析为 json 对象时获取值。

我试图获得像......

public class JSONParsing1 extends ListActivity {

private static String url = "http://wsapi.vr2020.com/countries.json";

private static final String TAG_META = "meta";
private static final String TAG_SUCCESS = "success";
private static final String TAG_COUNTRIES = "Countries";
private static final String TAG_ID = "Id";
private static final String TAG_NAME = "Name";
private static final String TAG_CITY = "Cities";
private static final String TAG_CITY_ID = "Id";
private static final String TAG_CITY_NANE = "Name";

private String id;
private String name;
private String city_id;
private String city_name;
JSONObject meta;
JSONArray Countries = null;
JSONArray Cities = null;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,        String>>();

    JSONParser jsonParser = new JSONParser();
    JSONObject jsonObject = jsonParser.getJSONFromUrl(url);

    try {
        meta = jsonObject.getJSONObject(TAG_META);

        TextView startText = (TextView) findViewById(R.id.stat_textView);
        startText.setText(meta.getString(TAG_SUCCESS));


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

    try {

        Countries = meta.getJSONArray(TAG_COUNTRIES);
        for (int i = 0; i < Countries.length(); i++) {
            JSONObject obj = Countries.getJSONObject(i);

            id = obj.getString(TAG_ID);
            name = obj.getString(TAG_NAME);

            JSONArray city = obj.getJSONArray(TAG_CITY);
            for(int j = 0; j< city.length(); j++){
                JSONObject cityobj = city.getJSONObject(j);

                city_id = cityobj.getString(TAG_CITY_ID);
                city_name = cityobj.getString(TAG_CITY_ID);

            }

            HashMap<String, String> map = new HashMap<String, String>();
            map.put(TAG_ID, id);
            map.put(TAG_NAME, name);
            list.add(map);
        }

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

    ListAdapter adapter = new SimpleAdapter(this, list,
            R.layout.list_items, new String[] { TAG_ID, TAG_NAME,
                     }, new int[] { R.id.id_textView,
                    R.id.name_textView,   R.id.description_textView });
    setListAdapter(adapter);

}

}

JSON 解析器类是

public class JSONParser {

static InputStream is = null;
static JSONObject jsonObject = null;
static String json = "";

public JSONObject getJSONFromUrl(String url) {

    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    try {
        jsonObject = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    return jsonObject;
}
 }

任何人都可以分享如何解析上述 JSON 吗?提前致谢。

4

2 回答 2

2

将当前 Json 解析为:

JSONObject jsonObj = new JSONObject(jsonStr); 

// these 2 are strings 
JSONObject c = jsonObj.getJSONObject("meta");
String success = c.getString("success"); 

JSONArray jsonarr = jsonObj.getJSONArray("Countries");

// lets loop through the JSONArray and get all the items 
for (int i = 0; i < jsonarr.length(); i++) { 
     JSONArray jsonarra = jsonarr.getJSONArray(i);
    // lets loop through the JSONArray and get all the items 
    for (int j = 0; j < jsonarra.length(); j++) { 
         JSONObject jsonarrtwo = jsonarra.getJSONObject(j);
               // these 2 are strings 
        String str_id = jsonarrtwo.getString("id"); 
        String str_Name = jsonarrtwo.getString("Name"); 

                JSONArray jsonarr_cities = jsonarrtwo.getJSONArray("Cities");
            // lets loop through the JSONArray and get all the items 
            for (int t = 0; t < jsonarr_cities.length(); t++) { 
                // printing the values to the logcat 
                JSONArray jsonarr_cities_one = jsonarrtwo.getJSONArray(t);
            for (int tt = 0; tt < jsonarr_cities_one.length(); tt++) { 
                // printing the values to the logcat 

                JSONObject jsonarr_cities_two = jsonarr_cities_one.getJSONObject(tt);
                   // these 2 are strings 
                String str_idone = jsonarr_cities_two.getString("id"); 
                String str_Nameone = jsonarr_cities_two.getString("Name"); 
              } 
            } 
    } 
} 

解析 json 试试这个 tuts:

http://www.androidcompetencycenter.com/2009/10/json-parsing-in-android/

用于格式化 json :

http://jsonviewer.stack.hu/

于 2012-11-07T05:35:36.950 回答
0

You can validate your json string by this tool http://jsonlint.com/

Your json string contains a json array of json array at the Countries tag and Cities tag. Try something like this in your JSONParsing1 activity;

replace the line of code,

Countries = meta.getJSONArray(TAG_COUNTRIES);  

with this line

Countries = new JSONArray(jsonObject.getJSONArray(TAG_COUNTRIES).toString());

replace the line of code,

JSONArray city = obj.getJSONArray(TAG_CITY);

with this line

JSONArray city = new JSONArray(obj.getJSONArray(TAG_CITY).toString());

It may help you to solve the problem. Try this way... ;)

于 2012-11-07T05:47:49.527 回答