我想用org.json库创建新的JSON对象,但是我注意到Java14记录有问题。
当我打电话的时候
String json = new JSONObject(new Order("", "Albert", "GOOGL", "SELL", 97.9, 90L)).toString();字段为空。
我想是因为java记录没有使用像getXYZ这样的旧的getter吗?
周围有简单的工作吗?我是说不用不同的图书馆。或者我的假设是错误的。
public record Order(
String id,
String userId,
String securityId,
String type,
Double price,
Long quantity
) {
}
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>发布于 2022-06-18 21:55:51
如果您不想使用其他库,如Jackson或Gson (在我看来,这将是一个更好的解决方案),您可以编写自己的转换器:
public final class JsonConverter {
private JsonConverter() {
}
@SneakyThrows
public static String toJSON(Object object) {
Class<?> c = object.getClass();
JSONObject jsonObject = new JSONObject();
for (Field field : c.getDeclaredFields()) {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(object);
jsonObject.put(name, value);
}
return jsonObject.toString();
}
}你可以用它,比如:
public static void main(String[] args) {
Order order = new Order("", "Albert", "GOOGL", "SELL", 97.9, 90L);
System.out.println(order);
JSONObject jsonObject = new JSONObject(order);
System.out.println(jsonObject.toString());
System.out.println(JsonConverter.toJSON(order));
}输出:
OrderRecord[id=, userId=Albert, securityId=GOOGL, type=SELL, price=97.9, quantity=90]
{}
{"quantity":90,"price":97.9,"securityId":"GOOGL","id":"","type":"SELL","userId":"Albert"}这是一个真正的解决办法。但是,它使用的正是org.json。
发布于 2022-06-18 21:57:55
根据文档 JSONObject(Object )构造函数
使用bean JSONObject getters从对象构造。
因此,正如您注意到的,它希望getter格式为getFieldName(),但在记录中,getter的名称不同。
例如,文件价格的获取者应该是price(),而不是getPrice()。
一个可能的解决方案是在record类中添加getter,如下所示:
public record Order(
String id,
String userId,
String securityId,
String type,
Double price,
Long quantity
) {
public Double getPrice() { // Compliant
return price;
}
public String getId() { // Compliant
return id;
}
public String getSecurityId() { // Compliant
return securityId;
}
public String getType() { // Compliant
return type;
}
public Long getQuantity() { // Compliant
return quantity;
}
}您应该看到这样的输出:

https://stackoverflow.com/questions/72672489
复制相似问题