將從服務端獲取的json數據轉換爲Android端的list,map等格式的數據

當時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);
        });

輸出結果

在這裏插入圖片描述

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章