簡體   English   中英

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

[英]Parsing Json in Android with out using any external libraries

我使用下面的代碼將地圖轉換為Json String

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

如何使用任何外部庫解析上面的Json String以在Android中恢復地圖?

如果你有成對的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));
}

您正在詢問如何解析但我在您的問題中沒有看到要解析的任何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

您還可以從我的其他答案中進行檢查以進行比較: 將String轉換為JsonArray

您可以在此處查看我的答案以獲取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);

結果是您從HTTPRequest獲得的響應。

使用此jObject使用特定名稱獲取不同類型:

串:

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

陣:

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

例如。 為了解析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;  
}

請注意,這不是完整的代碼。 我正在為您提供主要細節。 如果您需要有關代碼的任何具體細節,請與我們聯系。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM