我在我的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数据中跳过/删除那些空值?
答案 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"]