反序列化这个Json对象的最佳方法是什么?
{
"key1" : "val1",
"key2" : "blank"
}
进入java hashmap,其中字符串blank
被null
替换?
{
"key1" : "val1",
"key2" : null
}
我目前正在使用Jackson进行反序列化。
答案 0 :(得分:0)
你会找到部分答案here。
你只需要操纵while循环中的行:
Object value;
if (object.get(key).equals("blank")) {
value = "null";
} else {
value = object.get(key);
}
并打印出来会给出:
System.out.println(map.get("key1")); // returns val1
System.out.println(map.get("key2")); // returns null
您的最终代码将如下所示,您可能需要导入正确的.jar文件:
import com.orsoncharts.util.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import static com.sun.xml.internal.ws.binding.WebServiceFeatureList.toList;
public class JsonAnswerOne {
public static void main(String[] args) throws JSONException {
String input = "{\n" +
" \"key1\" : \"val1\",\n" +
" \"key2\" : \"blank\"\n" +
"}";
parse(input);
}
private static void parse(String input) throws JSONException {
JSONObject mainObject = new JSONObject(input);
Map<String, Object> map = jsonToMap(mainObject);
System.out.println(map.get("key1")); // returns val1
System.out.println(map.get("key2")); // returns null
}
private static Map<String, Object> jsonToMap(JSONObject json) throws JSONException {
Map<String, Object> retMap = new HashMap<String, Object>();
if (json != JSONObject.NULL) {
retMap = toMap(json);
}
return retMap;
}
private static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<String> keysItr = object.keys();
while (keysItr.hasNext()) {
String key = keysItr.next();
Object value;
if (object.get(key).equals("blank")) {
value = "null";
} else {
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;
}
}
答案 1 :(得分:0)
我尝试this并最终得到了这个:
NULL
完整的示例解决方案,附加示例将JSON反序列化为另一个类:
https://gist.github.com/audacus/e70ce0f3cd4b17197d911769e05b237e