Java 使用Jackson将JsonObject转换为Json字符串
我正在使用Jackson,并且能够获得一个Java 使用Jackson将JsonObject转换为Json字符串,java,json,jackson,Java,Json,Jackson,我正在使用Jackson,并且能够获得一个JSONObject。我需要能够将这个JSONObject转换为它的json格式。也就是说,由这个JSONObject的子字符串表示的对象 比如: JsonObject object = ...; object.toJsonString(); 令人惊讶的是,一个简单的谷歌搜索并没有得到太多的回应,我自己也不知道该怎么做 有什么想法吗?试试看 StringWriter out = new StringWriter(); object.writeJ
JSONObject
。我需要能够将这个JSONObject
转换为它的json
格式。也就是说,由这个JSONObject
的子字符串表示的对象
比如:
JsonObject object = ...;
object.toJsonString();
令人惊讶的是,一个简单的谷歌搜索并没有得到太多的回应,我自己也不知道该怎么做
有什么想法吗?试试看
StringWriter out = new StringWriter();
object.writeJSONString(out);
String jsonText = out.toString();
System.out.print(jsonText);
JSONObject object = ...;
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(object);
如果需要桥接这两个API,可以创建自定义StdSerializer。 有关自定义序列化程序的详细信息:
私有静态类JSONObjectSerializer扩展了StdSerializer{
JSONObjectSerializer(){
这个(空);
}
JSONObjectSerializer(类t){
超级(t);
}
@重写公共void serialize(JSONObject值、JsonGenerator gen、SerializerProvider提供程序)引发IOException{
gen.writeStartObject();
value.keys().ForEachLeving(键->{
试一试{
gen.writeStringField(key,value.getString(key));
}捕获(IOEX异常){
抛出新的RuntimeException(“序列化JSONObject时遇到错误。”,ex);
}
});
writeEndObject将军();
}
私有静态SimpleModule toModule(){
返回新的SimpleModule();
}
}
//.......
ObjectWriter writer=newObjectMapper()
.registerModule(JSONObjectSerializer.toModule())
.writerWithDefaultPrettyPrinter();
//.......
试一试{
s=w.writeValueAsString(v);//v是您的JSONObject或父对象
}捕获(JsonProcessingException ex){
抛出新的RuntimeException(“无法将对象写入json。”,ex);
}
基本上是这样吗?@dhke不,那是一个对象。在本例中,它已被解析。Hrm。。。那不是Jackson中的ObjectNode
吗?@dhke我也可以作为ObjectNode访问它。但问题是,我如何把它恢复到一个我不理解的子字符串表示。Jackson没有JsonObject
或JsonObject
类型。你说的是什么类型的?Jackson的ObjectNode
的toString
方法产生了它的JSON表示。是的,它似乎没有写入方法。
private static class JSONObjectSerializer extends StdSerializer<JSONObject> {
JSONObjectSerializer(){
this(null);
}
JSONObjectSerializer(Class<JSONObject> t) {
super(t);
}
@Override public void serialize(JSONObject value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
value.keys().forEachRemaining(key-> {
try {
gen.writeStringField(key,value.getString(key));
} catch (IOException ex){
throw new RuntimeException("Encountered an error serializing the JSONObject.",ex);
}
});
gen.writeEndObject();
}
private static SimpleModule toModule(){
return new SimpleModule().addSerializer(JSONObject.class, new JSONObjectSerializer());
}
}
//.......
ObjectWriter writer = new ObjectMapper()
.registerModule(JSONObjectSerializer.toModule())
.writerWithDefaultPrettyPrinter();
//.......
try {
s = w.writeValueAsString(v);// v being your JSONObject or parent
} catch (JsonProcessingException ex) {
throw new RuntimeException("Unable to write object to json.", ex);
}