将Jackson对象转换为JSONObject java
我想知道如何将Jackson对象转换为JSONObject 我已经尝试过了,但是我不相信这是正确的方法将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序列化为字
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