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

如何用原生Java将Java对象转为JSON(无外部库)?有无更简便方法?

原生Java实现Java对象转指定JSON的简便方式

针对你给出的DataObject类,要转成指定格式的JSON且不依赖外部库,有两种简便的原生实现方式:

1. 硬编码字符串拼接(最直接,适合固定类)

如果DataObject的字段结构固定不变,直接写个toJson方法拼接字符串是最简单的方案——不需要反射或复杂逻辑,运行效率也最高:

public class DataObject {
    private String access;
    private String foo;
    private Integer age;

    // 添加getter以读取私有字段
    public String getAccess() { return access; }
    public String getFoo() { return foo; }
    public Integer getAge() { return age; }

    // 转JSON方法
    public String toJson() {
        // 处理null值,按示例填充默认值:字符串用"value",整数用0
        String accessVal = getAccess() != null ? "\"" + getAccess() + "\"" : "\"value\"";
        String fooVal = getFoo() != null ? "\"" + getFoo() + "\"" : "\"value\"";
        int ageVal = getAge() != null ? getAge() : 0;
        
        return String.format("{\"access\": %s, \"foo\": %s, \"age\": %d}", accessVal, fooVal, ageVal);
    }
}

使用时直接调用obj.toJson()就能得到符合要求的JSON字符串。

2. 反射实现通用转换(适合多类场景)

如果需要给多个类做JSON转换,不想重复写拼接代码,可以用Java反射批量处理字段,减少重复劳动:

import java.lang.reflect.Field;

public class SimpleJsonConverter {
    public static String toJson(Object obj) throws IllegalAccessException {
        StringBuilder jsonBuilder = new StringBuilder("{");
        Field[] fields = obj.getClass().getDeclaredFields();

        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            field.setAccessible(true); // 允许访问私有字段
            String fieldName = field.getName();
            Object fieldValue = field.get(obj);

            // 拼接键值对
            jsonBuilder.append("\"").append(fieldName).append("\": ");

            // 根据字段类型处理值
            if (fieldValue instanceof String) {
                jsonBuilder.append("\"").append(fieldValue != null ? fieldValue : "value").append("\"");
            } else if (fieldValue instanceof Integer) {
                jsonBuilder.append(fieldValue != null ? fieldValue : 0);
            }
            // 可扩展支持Long、Boolean等其他常用类型

            // 最后一个字段不加逗号
            if (i != fields.length - 1) {
                jsonBuilder.append(", ");
            }
        }

        jsonBuilder.append("}");
        return jsonBuilder.toString();
    }
}

使用示例:

public class Main {
    public static void main(String[] args) throws IllegalAccessException {
        DataObject data = new DataObject();
        data.access = "customValue";
        data.age = 25;
        
        String json = SimpleJsonConverter.toJson(data);
        System.out.println(json);
        // 输出:{"access": "customValue", "foo": "value", "age": 25}
    }
}

两种方式对比

  • 硬编码:代码极简、无异常处理、执行快,但字段变更时需要同步修改toJson方法。
  • 反射:一次编写适配多类,字段变更无需修改转换逻辑,但要处理IllegalAccessException,且效率略低于硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:55:23