在Java中,JSONObject对象和Map对象是两种常用的数据结构,本篇攻略将介绍JSONObject对象和Map对象相互转换的方法。
JSONObject 是一个能够存储 key-value 映射的简单的开放解决方案。 JSONObject 的 constructor 支持通过传入一个 Map
Map 是一个key-value映射的接口。Map 的实现类可以看做一个散列表,也称为哈希表。每一个Key都对应了一个Value。Map 通常用来存储一些键值对(key-value pair), 并根据key快速获取value。
我们可以通过 JSONObject 对象的 toMap
方法将 JSONObject 转换成 Map 对象:
import org.json.JSONObject;
import java.util.Map;
public class JsonMapConvert {
public static Map<String, Object> jsonToMap(JSONObject json) {
Map<String, Object> retMap = new HashMap<String, Object>();
if (json != null) {
retMap = toMap(json);
}
return retMap;
}
public static Map<String, Object> toMap(JSONObject object) {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<String> keysItr = object.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Object value = object.get(key);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
}
return map;
}
}
这里使用了 JSONObject 对象的 keys
和 get
方法来获取 key-value 映射并转换成 Map 对象。
示例:
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Demo {
public static void main(String[] args){
JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "张三");
jsonObj.put("age", 18);
jsonObj.put("address", "北京市海淀区");
Map<String,Object> map = JsonMapConvert.jsonToMap(jsonObj);
System.out.println(map.get("name")); // 张三
System.out.println(map.get("age")); // 18
System.out.println(map.get("address")); // 北京市海淀区
}
}
上面的代码示例中,我们首先创建了一个 JSONObject 对象并添加了三个键值对,然后使用 JsonMapConvert 类的 jsonToMap
方法将 JSONObject 对象转换成 Map 对象,最后通过 map 对象获取键值对的值。
通过put
方法将Map置入到JSONObject中即可实现Map转JSONObject,如下所示:
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class MapToJsonConvert {
public static JSONObject toJSONObject(Map map) {
return new JSONObject(map);
}
}
示例:
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Demo {
public static void main(String[] args){
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "张三");
map.put("age", 18);
map.put("address", "北京市海淀区");
JSONObject jsonObj = MapToJsonConvert.toJSONObject(map);
System.out.println(jsonObj.toString());
}
}
上面的代码示例中,我们首先创建了一个 Map 对象并添加了三个键值对,然后使用 MapToJsonConvert 类的 toJSONObject 方法将 Map 对象转换成 JSONObject 对象,最后将 JSONObject 对象打印输出。