當時list<Object>或者是數據轉換爲 List<Map>的形式 public static boolean handleCityResponse(String response,int provinceId){ if (!TextUtils.isEmpty(response)){ try { JSONArray allcitys = new JSONArray(response); for (int i=0;i<allcitys.length();i++){ JSONObject object = allcitys.getJSONObject(i); City city = new City(); city.setCityName(object.getString("name")); city.setCitycode(object.getInt("id")); city.setProvinceId(provinceId); city.save(); } return true; } catch (JSONException e) { e.printStackTrace(); } } return false; }
這位寫的不錯,有些地方值得學習: https://blog.csdn.net/a1064072510/article/details/86106430
今天,同事問我json的問題。遍歷json數組,解決完以後。我想到了 json轉Map這個問題。寫一下,發現效果還行 那個發上來看看吧。
如果想省事的話,用阿里的FastJson 我感覺也是不錯的,網上教程很多,我就不多說了。
注意這是Android自帶的json包
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
在這裏說一下,JSONObject是鍵值對應的,符合map鍵值對應, JSONArray 是沒有key的。這裏,要轉成map的話,我是按照JSONArray裏面的元素順序,給他們key,key就是他們的位置
看代碼:
/**
* @param content json字符串
* @return 如果轉換失敗返回null,
*/
Map<String, Object> jsonToMap(String content) {
content = content.trim();
Map<String, Object> result = new HashMap<>();
try {
if (content.charAt(0) == '[') {
JSONArray jsonArray = new JSONArray(content);
for (int i = 0; i < jsonArray.length(); i++) {
Object value = jsonArray.get(i);
if (value instanceof JSONArray || value instanceof JSONObject) {
result.put(i + "", jsonToMap(value.toString().trim()));
} else {
result.put(i + "", jsonArray.getString(i));
}
}
} else if (content.charAt(0) == '{'){
JSONObject jsonObject = new JSONObject(content);
Iterator<String> iterator = jsonObject.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = jsonObject.get(key);
if (value instanceof JSONArray || value instanceof JSONObject) {
result.put(key, jsonToMap(value.toString().trim()));
} else {
result.put(key, value.toString().trim());
}
}
}else {
Log.e("異常", "json2Map: 字符串格式錯誤");
}
} catch (JSONException e) {
Log.e("異常", "json2Map: ", e);
result = null;
}
return result;
}
使用
JSONObject jsonObject = new JSONObject();
jsonObject.put("one", "哈哈哈");
jsonObject.put("two", "yyy");
JSONArray jsonArray = new JSONArray();
jsonArray.put("數組內容1");
jsonArray.put("數組內容2");
jsonArray.put("數組內容3");
JSONObject inner = new JSONObject();
inner.put("內置", "我是內置的");
inner.put("內置數組", new JSONArray().put(1));
jsonArray.put(inner);
jsonObject.put("three", jsonArray);
Map<String, Object> map = jsonToMap(jsonObject.toString());
//這裏最好寫一個循環輸出map的方法 ,我這是偷懶的寫法
map.forEach((s, o) -> {
Zprint.log(this.getClass(), s, o);
});
輸出結果