将Jackson对象转换为JSONObject java

将Jackson对象转换为JSONObject java,java,json,jackson,Java,Json,Jackson,我想知道如何将Jackson对象转换为JSONObject 我已经尝试过了,但是我不相信这是正确的方法 public JSONObject toJSON() throws IOException { ObjectMapper mapper = new ObjectMapper(); return new JSONObject(mapper.writeValueAsString(new Warnings(warnings))); } 现在,您正在将Pojo序列化为字

我想知道如何将Jackson对象转换为JSONObject

我已经尝试过了,但是我不相信这是正确的方法

public JSONObject toJSON() throws IOException {
    ObjectMapper mapper = new ObjectMapper();       
    return new JSONObject(mapper.writeValueAsString(new Warnings(warnings)));
}

现在,您正在将Pojo序列化为
字符串
,然后解析该
字符串
,并将其转换为
HashMap
样式的对象,格式为
JSONObject

这是非常低效的,没有任何好处

Jackson已经提供了一个类,用于作为JSON对象与Pojo交互。因此,只需将对象转换为
ObjectNode
。这里有一个有效的例子

public class Example {
    public static void main(String[] args) throws Exception {
        Pojo pojo = new Pojo();
        pojo.setAge(42);
        pojo.setName("Sotirios");
        ObjectMapper mapper = new ObjectMapper();
        ObjectNode node = mapper.valueToTree(pojo);
        System.out.println(node);
    }
}

class Pojo {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

否则,您的工作方式很好。

您的工作方式很好,因为我也使用这种方式来创建JSONobject

这是我的密码

 public JSONObject getRequestJson(AccountInquiryRequestVO accountInquiryRequestVO) throws  JsonGenerationException, JsonMappingException, IOException {
          ObjectMapper mapper = new ObjectMapper();
          JSONObject jsonAccountInquiry;

           jsonAccountInquiry=new JSONObject(mapper.writeValueAsString(accountInquiryRequestVO));

  return jsonAccountInquiry;  
 }
这对我来说很好。但您也可以始终使用JsonNode 下面是该方法的示例代码

JsonNode jsonNode=mapper.valueToTree(accountInquiryRequestVO);

它很容易使用

你为什么要这样做?Jackson已经有了
JsonNode
ObjectNode
。如果我知道答案,我就不会问这个问题了;-)
JSONObject
是否已经能够转换POJO了?结果不是很好,我得到了以下异常。JSONObject属性可以是布尔值、数字、字符串、org.apache.tapestry5.json.JSONArray、org.apache.tapestry5.json.JSONLiteral、org.apache.tapestry5.json.JSONObject、org.apache.tapestry5.json.JSONObject$Null、org.apache.tapestry5.json.JSONString中的一个。不允许键入org.codehaus.jackson.node.ObjectNode。@Code您能解释一下您试图用ObjectNode做什么吗?@CodeJunkie我建议您使用ObjectNode而不是JSONObject,但是我不知道你是如何使用它的。
,因为我也用这种方法来制作一个JSONobject
,但这并不正确。如果他们已经在使用Jackson,那么就没有理由在POJO中创建一个
字符串。直接前往
JsonNode
/
ObjectNode
。这不对。但有时当您处理管理非常旧的代码库时。我在一个正在迁移到Jackson的应用程序中,但是仍然有很多使用JsonObject的旧代码。而且现在也没有时间重写,可能会断掉无数行。谢谢你的回答@MacDaddy