Как распарсить строку с объектом JSON?

Рейтинг: -1Ответов: 2Опубликовано: 24.12.2014

Есть код парсинга массива, сам недавно делал:

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);

int status = response.getStatusLine().getStatusCode();
if (status == 200) {
    HttpEntity entity = response.getEntity();
    String data = EntityUtils.toString(entity);

    JSONArray jsonarr = new JSONArray(data);

    for (int i=0; i<jsonarr.length();i++){
        homelist hmlist = new homelist();
        JSONObject c = jsonarr.getJSONObject(i);

        hmlist.setTitle(c.getString("title"));
        hmlist.setPictures(c.getString("picture"));
        hmlist.setHref(c.getString("href"));
        hmlist.setDate(c.getString("date"));

        homelist.add(hmlist);

Так вот он парсит массив вида:

[{"":"","":""}]

Вопрос в следующем: как распарсить такую строку

{"":"","":""}

Ответы

▲ 2Принят

{"":"","":""} - это объект, а не строка. Если по простому, то хеш-таблица. Парсить её надо соответствующе.

Скажем у вас:

JSONObject objJSON;  // там у вас {"":"","":"",...}

Если вы знаете все ключи, то по ним и берёте:

String val = objJSON.getString("my_key");

Если нет, то:

// здесь будут все данные
HashMap<String, String> res = new HashMap<String, String>();
//получаем итератор
Iterator itr = objJSON.keys();
//прогоняем
while(itr.hasNext()) {
   String key = itr.next().toString();
   //записываем по ключику значение
   res.put(key, objJSON.get(key));
}
▲ 1

Вот такой пример JSON:

[
   {
      "news":{
         "title":"5th title",
         "content":"5th content",
         "date":"1363197493"
      }
   },
   {
      "news":{
         "title":"4th title",
         "content":"4th content",
         "date":"1363197454"
      }
   },
   {
      "news":{
         "title":"3rd title",
         "content":"3rd content",
         "date":"1363197443"
      }
   }
]

Парсите так:

JSONArray array = new JSONArray(jsonString);

for(int i = 0; i < array.length(); i++) {
    JSONObject obj = array.getJSONObject(i);
    JSONObject innerObject = obj.getJSONObject("news");

    String title = innerObject.getString("title");
    String content = innerObject.getString("content");
    String date = innerObject.getString("date");

}