Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson将JsonObject转换为Json字符串_Java_Json_Jackson - Fatal编程技术网

Java 使用Jackson将JsonObject转换为Json字符串

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

我正在使用Jackson,并且能够获得一个
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);
}