一、將JSONString轉換為Map
在將JSONArray轉換為Map之前,我們先可以將JSONString轉換為Map,這樣方便我們在後面處理JSONArray時使用。
我們可以使用Gson庫的fromJson方法將JSONString轉換為Map,代碼示例:
import com.google.gson.Gson; import java.lang.reflect.Type; import java.util.Map; public class JsonUtil { private static Gson gson = new Gson(); /** * 將JSONString轉換為Map */ public static Map parseJsonToMap(String jsonString) { Type type = new TypeToken<Map>() { }.getType(); return gson.fromJson(jsonString, type); } }
這裡使用了Gson庫的TypeToken來表示Map<String, Object>類型,使用gson.fromJson方法將JSONString轉換為Map。
二、JSONString如何轉換成Map集合
在得到Map之後,我們可以使用Map的put方法將JSONArray中的每個元素轉換為Map集合。
假設JSONString的格式如下:
[ { "name": "Tom", "age": 20 }, { "name": "Jerry", "age": 22 } ]
那麼我們可以使用下面的代碼將JSONArray轉換為Map集合:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonUtil { /** * 將JSONString轉換為Map */ public static List<Map> parseJsonArrayToList(String jsonString) { List<Map> list = new ArrayList(); List<Map> jsonList = gson.fromJson(jsonString, new TypeToken<List<Map>>() { }.getType()); for (Map map : jsonList) { Map temp = new HashMap(); temp.putAll(map); list.add(temp); } return list; } }
我們先使用Gson庫將JSONString轉換為List<Map<String, Object>>,然後遍歷該List中的每個Map並將其轉換為新的Map加入到List中。
三、如何轉化JSONObject為Map
有時候JSONObject可能也要轉換成Map,可以使用類似的方法進行轉換。代碼示例:
import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; public class JsonUtil { /** * 將JSONObject轉換為Map */ public static Map parseJsonObjectToMap(JSONObject jsonObject) throws JSONException { Map map = new HashMap(); for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); if (value instanceof JSONObject) { value = parseJsonObjectToMap((JSONObject) value); } map.put(key, value); } return map; } }
我們使用了遞歸的方法,不斷將JSONObject中的Map逐層轉換成新的Map,最終返迴轉換完成後的Map。
四、如何使用Map集合
將JSONArray轉換為Map之後,我們可以像使用普通的Map一般使用它,例如:
List<Map> userList = JsonUtil.parseJsonArrayToList(jsonString); for (Map user : userList) { String name = (String) user.get("name"); int age = ((Double) user.get("age")).intValue(); System.out.println("name:" + name + ", age:" + age); }
這裡我們使用了Map的get方法獲取其中的元素,需要注意的是獲取數字類型的元素需要進行強制類型轉換。
五、處理複雜的JSONArray
上面的方法對於簡單的JSONArray轉換為Map集合已經足夠,但是如果JSONArray中有嵌套的JSONArray或JSONObject就需要使用遞歸的方法進行轉換。
以以下JSONString為例:
[ { "name": "Tom", "age": 20, "hobbies": [ "reading", "writing" ] }, { "name": "Jerry", "age": 22, "hobbies": [ "singing", "dancing", { "category": "sports", "name": "basketball" } ] } ]
我們需要使用遞歸的方法處理其中的嵌套元素。代碼示例:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class JsonUtil { /** * 將JSONArray轉換為Map */ public static List<Map> parseJsonArrayToList(String jsonString) throws JSONException { List<Map> list = new ArrayList(); JSONArray jsonArray = new JSONArray(jsonString); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); Map map = new HashMap(); for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); if (value instanceof JSONArray) { value = parseJsonArrayToList(value.toString()); } else if (value instanceof JSONObject) { value = parseJsonObjectToMap((JSONObject) value); } map.put(key, value); } list.add(map); } return list; } /** * 將JSONObject轉換為Map */ public static Map parseJsonObjectToMap(JSONObject jsonObject) throws JSONException { Map map = new HashMap(); for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); if (value instanceof JSONArray) { value = parseJsonArrayToList(value.toString()); } else if (value instanceof JSONObject) { value = parseJsonObjectToMap((JSONObject) value); } map.put(key, value); } return map; } }
遞歸方法中主要的區別就是處理JSONArray和JSONObject的方法。
六、總結
本文主要介紹了如何將JSONArray轉換為Map集合。我們可以通過先將JSONString轉換為Map,然後使用Map的put方法將JSONArray中的每個元素轉換為Map集合。此外,為了處理複雜的JSONArray,我們介紹了使用遞歸的方法進行轉換。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252220.html