[英]Converting List to JSON in Java with correct extension
我正在尝试使用不同的代码创建一个错误List
,并使用gson
将它们转换为JSON
。
String jsonString = gson.toJson(Errors.getErrors());
这是课程:
public class Errors {
private static List<SingleError> errors = new ArrayList<>();
public static List<SingleError> getErrors() {
return errors;
}
public static void addError(SingleError singleError) {
errors.add(singleError);
}
}
我得到的输出:
[
{
"code": "bad_signal"
}
]
我需要的输出:
{
"errors": [
{
"code": "bad_signal"
}
]
}
我在Errors
类中缺少什么以获得我需要的输出?
如果将它添加到类中而不只是将字符串添加到json转换中会更好。
编辑
正如 schomsel 所建议的,我应该使用这一行来获得我需要的输出。
gson.toJson(Collections.singletonMap("errors", Errors.getErrors()))
它确实有效,但我没有提到我也在使用Servlet
返回字符串并设置此标头,这会删除“错误”。
resp.setHeader("Content-Type", "application/json");
我需要在这里使用的正确标题是什么?
显然,您应该了解所需的 json 表示是针对Errors
类本身而不是包含erros
列表,因此您的代码将被调整以便您可以将Errors
类实例作为输入传递给 - gson.toJson(...)
两种解决方案,
第一个解决方案 - 使Errors
字段和方法非静态并传递Errors
实例而不是errors
列表来调用 - gson.toJson(ErrorsInstance);
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
class Errors {
private List<SingleError> errors = new ArrayList<>();
public List<SingleError> getErrors() {
return errors;
}
public void addError(SingleError singleError) {
errors.add(singleError);
}
第二种解决方案 - 如果不能将字段和方法设为静态,则添加一个新方法以通过私有构造函数获取Errors
实例,然后从GsonBuilder
创建Gson
对象,以便在序列化期间可以包含静态字段。
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class Errors {
// private constructor
private Errors(List<SingleError> errors) {
Errors.errors = errors;
}
private static List<SingleError> errors = new ArrayList<>();
public static List<SingleError> getErrors() {
return errors;
}
// New method to return Errors instance
public static Errors getErrorsInstance() {
return new Errors(errors);
}
public static void addError(SingleError singleError) {
errors.add(singleError);
}
}
//在序列化期间包含静态字段并仅忽略瞬态字段-如果未完成,则 json 将为空
GsonBuilder gsonBuilder = new GsonBuilder();
// Allowing the serialization of static fields
gsonBuilder.excludeFieldsWithModifiers(java.lang.reflect.Modifier.TRANSIENT);
// Creates a Gson instance based on the current configuration
Gson gson = gsonBuilder.create();
Errors errorsInstance = Errors.getErrorsInstance();
String jsonStringTest = gson.toJson(errorsInstance );
编辑:
对于第二种解决方案,您不需要私有构造函数和新方法 - getErrorsInstance()
。 您可以简单地将new Errors()
给gson.toJson(...)
。 您需要的只是反序列化中包含的静态字段,同样适用于解决方案#1。 所以你不需要修改任何代码,只需确保GsonBuilder
包含静态字段并传递Errors
实例而不是包含列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.