在Android中解析Json而不使用任何外部库

时间:2014-03-27 10:48:08

标签: java android json

我使用下面的代码将地图转换为Json字符串

String msg = new JSONObject(map).toString();

如何使用任何外部库解析上面的Json String以在Android中恢复地图?

3 个答案:

答案 0 :(得分:1)

如果您有成对的String / String,可以通过这种方式轻松恢复:

JSONObject obj = new JSONObject(msg); 
Iterator<String> keys = obj.keys();
HashMap<String, String> map = new HashMap<String, String>();
while(keys.hasNext()) {
   String key = keys.next();
   map.put(key, obj.optString(key));
}

答案 1 :(得分:1)

您正在询问如何解析但我在您的问题中没有看到要解析的任何JSON。

没有任何库的示例解析方法如下所示:

JSONObject jo = new JSONObject(response);
JSONArray rootArray= jo.getJSONArray("jArray");
int rootArrayLength=rootArray.length();
for(int i=0;i<rootArrayLength;i++){
   int id=   rootArray.getJSONObject(i).getInt("value");
   // do same for others too and create an object
}
// create object and make a list

您还可以查看我的其他答案进行比较: Convert String to JsonArray

答案 2 :(得分:0)

您可以在此处查看我的答案,了解JSON解析:

https://stackoverflow.com/questions/21872643/about-json-parsing-exchange-data-with-rest-services/21872688#21872688

为完整起见,请查看以下详细信息:

JSONObject是JSON解析的关键类。此类表示键/值对中的JSON数据,其中值可以是任何类型:JSONObjects,JSONArrays,Strings,Booleans,Integers,Longs,Doubles

您将 JSONObject 创建为:

JSONObject jObject = new JSONObject(result);

其中result是您从HTTPRequest获得的响应。

使用此jObject使用特定名称获取不同类型:

<强>字符串:

String jsonString = jObject.getString("NAME");

<强>阵列:

JSONArray jsonArray = jObject.getJSONArray("NAME");

EG。为了解析place结果,我使用了以下函数,其中JSON类似于:

  "results" : [
 {
 "geometry" : {
    "location" : {
       "lat" : 36.817729,
       "lng" : 10.18206
    }
 },
 "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
 "id" : "35a4f720fff88e2cfb94d64bfd7dbe95a8b4a632",
 "name" : "Banque Al-Baraka",
 "reference" : "CoQBcwAAAJbocdTKVg8I8CzgDdNtBQQaMsaghRlks-IWYl9eDNmFtftPHMgEfVeek_NHJZ2AN9JbiMda1WvREmoeIHBHsNdz9i7gtBaLM1xB93uhema_oswpqD-eRQ9b3fvTo4MhTOeIa7cRJ70BSEtDMONZqFyjqlGvL-5WsiwmqI1F3Vp_EhArWzyFuNrJdly2cHRBNxUJGhQjlcyHs-U2F0ILpN-ce-PHEesdqA",
 "types" : [ "bank", "finance", "establishment" ],
 "vicinity" : "88 P9, Tunis"
  },
  {
 "geometry" : {
    "location" : {
       "lat" : 36.861635,
       "lng" : 10.164628
    }
 },
 "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
 "id" : "da42093835270f902f64bc870154e6787fffbc7b",
 "name" : "Agence Ennasr",
 "reference" : "CnRwAAAAoh-XuMXghUKtv2UtHQJiRXB0ZugUnAkJIyP-vBd2YzTj5GdwIb5XhUS9x5-uY9_OwyQUdMmUeDHYm4KXHFNvOoj7diOOHAGBu-xCI4svIxcCwQ2w063mc2G3lohiScYMNpbKhwnCaggt0H1iknZY6xIQxDvNwVN0wWkVwO8zf_El5hoUwHgmgFflE31LDLj2_rr0uc1zvZM",
 "types" : [ "bank", "finance", "establishment" ],
 "vicinity" : "Avenue de Hédi Nouira, Ariana"
  },
]

解析JSON数组

public ArrayList<HashMap<String,String>> parseResult(JSONObject jsonObject) throws JSONException        {        
    JSONArray jsonArray = jsonObject.getJSONArray(Constants.RESULTS);
    ArrayList<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>();
    for (int i = 0; i < jsonArray.length(); i++) {
        Object object = jsonArray.get(i);
        if (object instanceof JSONObject) {
            placesList.add(parsePlaceInfo((JSONObject) object));
       }
    }
    return placesList;
   }

解析简单的JSON对象

private HashMap<String, String> parsePlaceInfo(JSONObject place) throws JSONException {
    String name = place.getString(Constants.NAME);
    String icon = place.getString(Constants.ICON);
    String vicinity = place.getString(Constants.VICINITY);
    JSONObject locationObject =    place.getJSONObject(Constants.GEOMETRY).getJSONObject(Constants.LOCATION);
    String lat = locationObject.getString(Constants.LAT);
    String lng = locationObject.getString(Constants.LNG);
    HashMap<String, String> placeDetails = new HashMap<String, String>();
    placeDetails.put(Constants.NAME, name);
    placeDetails.put(Constants.ICON, icon);
    placeDetails.put(Constants.VICINITY, vicinity);
    placeDetails.put(Constants.LAT, lat);
    placeDetails.put(Constants.LNG, lng);

    return placeDetails;  
}

请注意,这不是完整的代码。我正在为您提供主要细节。如果您需要有关代码的任何具体细节,请与我们联系。谢谢!