我正在使用Gson库来解析JSON对象。特别是,我有这样的JSON:Gson:解析字符串[]
{
"key": ["string1", "string2"]
}
我想解析它在一个简单的String [],而不建立一个特定的对象。我想是这样的:
gson.fromJson(json, String[].class);
,但我有一个错误:“预期BEGIN_OBJECT但BEGIN_ARRAY”,我猜是因为钥匙的存在。任何想法我应该如何解决它?
我正在使用Gson库来解析JSON对象。特别是,我有这样的JSON:Gson:解析字符串[]
{
"key": ["string1", "string2"]
}
我想解析它在一个简单的String [],而不建立一个特定的对象。我想是这样的:
gson.fromJson(json, String[].class);
,但我有一个错误:“预期BEGIN_OBJECT但BEGIN_ARRAY”,我猜是因为钥匙的存在。任何想法我应该如何解决它?
创建一个具有key
属性的类,该类的类型为String[]
并反序列化为该类。
public class Thing
{
private String[] key;
public String[] getKey() {
return key;
}
}
Thing thing = gson.fromJson(json, Thing.class);
由于tvanfosson答案是完美的,我不应该添加任何东西,但在评论你问是不是有可能避免创建Thing
类。是的,但我认为它更脆弱。我要告诉你如何做这个代码:
String json = "{\"key\": [\"string1\", \"string2\"]}";
String mJson = json.replace("{\"key\":", "").replace("}","");
String[] strings = new Gson().fromJson(mJson, String[].class);
System.out.println(Arrays.asList(strings));
当然这个代码运行没有错误,并避免你额外的课程,但觉得如果里面有一些回车会发生什么。 它打破,除非您在替换调用中使用了regexp。在这一点上,我更愿意添加一个类,而不是思考正确的正则表达式,并让Gson完成整个工作。
我将此作为回应,而不是作为注释,以有足够的空间来解释自己,但这个答案不应该被视为正确的反应,而是由于黑客穷使用。更好地理解Gson的原因。
我想过这个,但我试图避免创建一个新的类,因为我只需要一个简单的String []。可能吗? – Heisenberg
@Heisenberg你可以在进行反序列化之前修改json字符串,但实际上我认为你应该将数据反序列化为它所代表的类型。如果这个类真的困扰你,那么可以在'gson'周围创建一个包装器,反序列化为一个内部类,然后返回包含在其中的'String []'。 – tvanfosson
不,创建一个新班级不是一个大问题,但我想知道是否有更直接的方法来做到这一点。如果没有更聪明的解决方案,我将创建该类... – Heisenberg