You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何让toString方法自动返回带单引号的JSON格式字符串

实现方案(无需手动维护toString逻辑,新增字段自动适配)

以下三种方案都可以满足需求,新增成员变量时完全不需要修改toString代码:


方案1:JSON序列化库实现(最稳定,格式兼容性好)

直接用Gson/Jackson等JSON序列化工具自动扫描类的所有字段生成JSON,再替换引号格式即可,示例用Gson演示:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

class MyClass {
    int myVariable;
    // 后续新增任意成员变量都无需修改toString逻辑
    private static final Gson gson = new GsonBuilder().create();

    @Override
    public String toString() {
        // 先序列化得到标准双引号JSON,再替换为单引号,外层包裹类名
        String fieldJson = gson.toJson(this);
        return "'" + getClass().getSimpleName() + "':" + fieldJson.replace("\"", "'");
    }
}

如果不需要输出某个字段,给字段加transient关键字修饰即可,序列化工具会默认跳过该字段


方案2:Apache Commons Lang工具类实现

如果不想引入JSON序列化库,可以用ToStringBuilder的反射能力自动生成JSON格式字符串:

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

class MyClass {
    int myVariable;

    @Override
    public String toString() {
        String fieldJson = ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
        return "'" + getClass().getSimpleName() + "':" + fieldJson.replace("\"", "'");
    }
}

方案3:Lombok注解实现(开发效率最高)

如果项目允许使用Lombok,配合序列化工具几行代码就能搞定:

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

// @Data注解会自动生成Getter/Setter等基础方法
@Data
class MyClass {
    int myVariable;
    private static final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public String toString() {
        try {
            return "'MyClass':" + objectMapper.writeValueAsString(this).replace("\"", "'");
        } catch (Exception e) {
            return super.toString();
        }
    }
}

补充说明:你当前示例中的代码存在两处语法错误,@Overide应改为@Override,返回值类型string应改为大写开头的String,且拼接的JSON格式不合法,上述方案会自动生成规范的键值对格式。

内容的提问来源于stack exchange,提问作者Shashi Tunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:30:02