如何用原生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
相关产品推荐
相关产品推荐

