一、将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 MapparseJsonToMap(String jsonString) { Type type = new TypeToken
这里使用了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
我们先使用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 MapparseJsonObjectToMap(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> 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> parseJsonArrayToList(String jsonString) throws JSONException { List > 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,我们介绍了使用递归的方法进行转换。