0

有没有办法将 String 传递给一些 Jackson 对象并让它为我填充 JSON obj?也许我将苹果与橙子进行比较,但 json-rpc-1.0.jar 库允许我这样做:

// string will be read in from file but putting the string below just to show what i'm trying to do.
JSONObject jsonObj; 
String testStr = "{"blah":123, "aaa": "got here", "foo":"bar", "bar":123}";
jsonObj = new JSONObject(testStr);
jsonObj.put("blah",345);

如果我执行

System.out.println(jsonObj);

我得到:

{"blah":345, "aaa": "got here", "foo":"bar", "bar":123}

json-rpc-1.0.jar 文件的问题是它不能很好地处理long原始类型。出于某种原因,如果我尝试将时间戳(长数据类型)分配给字段,它会将长数据转换为 1.32e9 之类的东西。

我发现 Jackson (jackson-core-2.2.3.jar) 比 longs 更好,保留了我的时间戳所需的 10-13 位数字。但是,我在 Jackson 中找不到与上述代码片段类似的东西。最接近的可能是 ObjectMapper.readValue 但与上面的不完全一样。

请让我知道这是可能的还是我只是在做梦。在此先感谢您的帮助。同时,我将尝试更多地查看 API。

4

1 回答 1

2

IMO 这不是杰克逊的本意。对于 Jackson,对象应该使用其类的字段进行序列化。之后您不应该向该 JSON 添加任何内容。但是,为了这个问题,这是您可以做的。举个例子

public static void main(String[] args) throws Exception {       
    ObjectMapper mapper = new ObjectMapper();
    MyClass a = new MyClass();
    ObjectNode node = mapper.<ObjectNode>valueToTree(a);
    node.put("blah", "123");
    System.out.println(node);
}

static class MyClass {
    private String value = "some text";
    private long timestamp = System.currentTimeMillis();
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    public long getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }
}

哪个打印

{"value":"some text","timestamp":1384233053765,"blah":"123"}

valueToTree()方法会将您的对象转换ObjectNode为一种包含各种 JSON 元素的树。ObjectNode您可以通过添加或删除元素来修改它。这就是我们所做的node.put("blah", "123");。它将添加一个带有 nameblah和 value的 Json 对象"123"

于 2013-11-12T05:12:59.980 回答