Java 如何使用GSON将字符串数组数据正确编码为JSON?

Java 如何使用GSON将字符串数组数据正确编码为JSON?,java,json,gson,Java,Json,Gson,我在Java项目中使用GSON以JSON格式对数据(从数据库中提取并存储到String数组中)进行编码。看起来一切正常,但问题在于字符串的大小。例如,我有以下字符串数组: String [] data = new String[12]; 假设我的字符串数组包含以下数据:{“ABC”、“DEF”、“GH”、“IJ”} 然后编码的JSON数据是:[“ABC”、“DEF”、“GH”、“IJ”、“u0000”、null、null、null、null、null、null] JSON数据中空值的数量取决于

我在Java项目中使用GSON以
JSON
格式对数据(从数据库中提取并存储到
String
数组中)进行编码。看起来一切正常,但问题在于
字符串的大小。例如,我有以下
字符串
数组:

String [] data = new String[12];
假设我的
字符串
数组包含以下数据:
{“ABC”、“DEF”、“GH”、“IJ”}

然后编码的JSON数据是:
[“ABC”、“DEF”、“GH”、“IJ”、“u0000”、null、null、null、null、null、null]

JSON数据中空值的数量取决于my
String
数组中可用的数据数量

因为数据是从数据库中检索的,所以我不能为我的
字符串
数组声明特定的大小

我使用以下代码将
String
数据编码为
JSON
格式

Gson gs = new Gson();
gs.toJson(data); //data String array contains data from database

有人能告诉我如何从JSON数据中跳过/删除这些空值吗?

如果您对处理数组大小感到不舒服,请使用
ArrayList
并将数据库中的每个结果添加到其中。然后,当您完成数据库方面的工作时:

data = arrayList.toArray(new String[arrayList.size()]);

这保证了
数据
对象的大小正好可以容纳您的数据。

首先是一个与问题没有直接关系的建议。你在评论中说:

当我以data[index++]的格式加载数据时,为了删除不需要的垃圾,我使用data[index]=“\0”。可能为此添加了\u000

我强烈建议您将数据加载到
列表中
,因为您似乎不太习惯使用数组

不要使用
String[]data=new String[12]
而使用
List data=new ArrayList()
。然后,在加载数据时,不要使用
data[index++]
而是使用
data.add

然后调用
new Gson().toJson(data)
将按照您的预期工作

无论如何,要准确回答您的问题,您只需清理阵列即可

String [] data = {"ABC", "DEF", "GH", "IJ", "\u0000", null, null, null, null, null, null};
System.out.println("data = " + new Gson().toJson(data));
int i = 0;
for (; i < data.length && data[i] != null && !Objects.equals(data[i],"\u0000"); i++) ;
String[] cleanData = Arrays.copyOf(data, i);
System.out.println("cleanData = " + new Gson().toJson(cleanData));

数据
数组的大小始终定义为12?当您从数据库加载数据时,多余的容量用null填充?那么
\u0000
字符串呢?不,它只是一个示例。一类数据可能小于12,其他数据可能大于12[取决于项目要求]。是,多余的容量用null填充。我不知道为什么要添加“\u000”。当我以data[index++]的格式加载数据时,为了删除不需要的垃圾,我使用
data[index]=“\0”
。可能为此添加了
\u000
data = ["ABC","DEF","GH","IJ","\u0000",null,null,null,null,null,null]
data = ["ABC","DEF","GH","IJ"]