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

6
我正在使用Jackson,并能够得到一个JSONObject。我需要能够将这个JSONObject转换为其json形式。也就是说,由此JSONObject的son字符串所表示的对象。
类似于:
JsonObject object = ...;
object.toJsonString();

通过简单的谷歌搜索,令人惊讶地没有找到太多反馈信息,我也不知道如何自己去做。

有什么想法吗?


所以基本上是使用Jackson将对象转储为字符串吗?(参考链接:https://dev59.com/9Wkw5IYBdhLWcg3wm70h) - dhke
@dhke 不,那是一个对象。在这种情况下,它已经被解析了。 - user489041
嗯...在Jackson中,那不就是一个“ObjectNode”吗? - dhke
@dhke 我也可以将其作为 ObjectNode 访问。但问题是,我该如何将其转换回一个 JSON 字符串表示形式呢? - user489041
1
我不明白。Jackson没有 JsonObjectJSONObject 类型。你说的是哪种类型?Jackson 的 ObjectNodetoString 方法会返回其 JSON 表示形式。 - Sotirios Delimanolis
3个回答

4

尝试一下,

JSONObject object = ...;
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(object);

4
我输出的结果是"{"empty":false}"。我使用的是Jackson 2.11.4版本。可能出了什么问题? - Olov
你有没有找到关于 "{"empty":false}" 的解决方案?我遇到了类似的问题。 - Srikar
@Olov Srikar,我的响应内容是这样的{"map": object, "empty":false}。我会收到额外的“empty”键和“map”键,并且映射的值将作为实际对象出现。我已经尝试了最新版本的2.15.0,但错误仍然存在。有没有办法去除“map”和“empty”键? - Siddhartha Narang

0
  StringWriter out = new StringWriter();
  object.writeJSONString(out);

  String jsonText = out.toString();
  System.out.print(jsonText);

是的,看起来 org.json.JSONObject 没有写入方法。 - user489041

0
如果您需要桥接这两个API,您可以创建一个自定义的StdSerializer。 更多关于自定义序列化器: https://www.baeldung.com/jackson-custom-serialization
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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接