在Java中用单引号从toStringMethod返回Json?

mfuanj7w  于 2023-01-06  发布在  Java
关注(0)|答案(2)|浏览(117)

我希望我的toString方法以json格式返回对象,并使用单引号,我不想手动管理toString方法,有没有自动管理的方法?目的是,如果我添加了一个新变量,我不想重做我的toString方法。
类我的类{ int myVariable;

@Overide
    public string toString() {
       return "'MyClass':{'myVariable'" +myVariable+"':}"
    }

}
j1dl9f46

j1dl9f461#

你可以使用像Jackson或Gson这样的图书馆,
示例:
与Jackson:

@Override
    public String toString() {
        try {
            return new ObjectMapper().writeValueAsString(this);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }

与Gson:

@Override
    public String toString() {
        return new Gson().toJson(this);
    }

输出示例:

{"calle":"Calle","numero":100}

这里有一些例子:Does it make sense to use reflection when implementing toString()?

k5ifujac

k5ifujac2#

您可以创建如下所示的实用程序类(注意:单引号引用的JSON无效,但如果这是您想要的):

public final class JsonBuilder {

    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    static {
        //OBJECT_MAPPER.enable(SerializationFeature.INDENT_OUTPUT);
        OBJECT_MAPPER.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
    }

    public static <T> String toJson(final T obj) {
        if (null == obj) {
            return null;
        }
        Class<?> cls = obj.getClass();
        ObjectWriter objectWriter = OBJECT_MAPPER.writerFor(cls);
        try {
            return "'" + cls.getName() + "':" + objectWriter.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new IllegalArgumentException(e);
        }
    }
}

然后是toString()方法

@Override
    public String toString() {
        return JsonBuilder.toJson(this);
    }

这将输出:'MyClass':{'myVariable':0}
如果要缩进输出,只需使用SerializationFeature.INDENT_OUTPUT取消ObjectMapper配置的注解

相关问题