如何使用GSON将String数组数据正确编码为JSON?

时间:2016-04-18 13:56:27

标签: java json gson

我在我的Java项目中使用GSON来编码String格式的数据(从数据库获取并存储到JSON数组中)。一切看起来都不错,但问题在于String的大小。例如,我有以下String数组:

String [] data = new String[12];

假设我的String数组包含以下数据:{"ABC", "DEF", "GH", "IJ"}

然后编码的JSON数据为:["ABC", "DEF", "GH", "IJ", "\u0000", null, null, null, null, null, null]

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

由于数据是从数据库中检索的,因此我无法为String数组声明特定大小。

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您对使用数组大小​​感到不舒服,请使用ArrayList并将数据库中的每个结果添加到其中。然后,当你完成了数据库方面的事情:

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

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

答案 1 :(得分:0)

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

  

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

我强烈建议您将数据加载到List,因为您似乎不习惯使用数组。

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

然后,电话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));

该代码的输出是:

data = ["ABC","DEF","GH","IJ","\u0000",null,null,null,null,null,null]
data = ["ABC","DEF","GH","IJ"]