从org.json JSONObject到org.codehaus.jackson

kas*_*ere 10 java json jackson

我想从移动org.jsonorg.codehaus.jackson.如何转换以下Java代码?

private JSONObject myJsonMessage(String message){
    JSONObject obj = new JSONObject();
    obj.put("message",message);
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

try-catch为简单起见,我遗漏了这个街区.

Joã*_*lva 19

而不是JSONObject使用杰克逊ObjectMapperObjectNode:

ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("message", "text");
Run Code Online (Sandbox Code Playgroud)

这将是杰克逊相当于您当前的org.json代码.

然而,杰克逊真正擅长的是它能够在你的Java类(POJO)和它们的JSON表示之间进行复杂映射,以及它的流API,它允许你进行真正快速的序列化,至少与org.json同行相比.


3co*_*ins 5

JSONObjectJackson api中没有.JSONObject您可以返回一个Map或Java Bean,而不是返回一个具有getter和setter的message属性.

public class MyMessage {
    private String message;

    public void setMessage(final String message) {
        this.message = message;
    }

    public String getMessage() {
        return this.message;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您的方法将简化为:

private MyMessage(String message) {
    MyMessage myMessage = new MyMessage();
    myMessage.setMessage(message);
    return myMessage;
}
Run Code Online (Sandbox Code Playgroud)

此更改的另一个方面是更改序列化代码,将MyMessage转换回json字符串.杰克逊做Java Bean,默认地图,你不需要创建JSONObject例如,

private String serializeMessage(MyMessage message){

    //Note: you probably want to put it in a global converter and share the object mapper
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(message);
}
Run Code Online (Sandbox Code Playgroud)

以上将返回 {message: "some message"}

为简洁起见,我跳过了例外情况.