杰克逊地图反序列化 - 价值替代

时间:2016-10-11 21:14:11

标签: java json jackson deserialization

反序列化这个Json对象的最佳方法是什么?

{
    "key1" : "val1",
    "key2" : "blank"
}

进入java hashmap,其中字符串blanknull替换?

   {
        "key1" : "val1",
        "key2" : null
   }

我目前正在使用Jackson进行反序列化。

2 个答案:

答案 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