2013-10-25 68 views
1

我正在使用Gson库来解析JSON对象。特别是,我有这样的JSON:Gson:解析字符串[]

{ 
"key": ["string1", "string2"] 
} 

我想解析它在一个简单的String [],而不建立一个特定的对象。我想是这样的:

gson.fromJson(json, String[].class); 

,但我有一个错误:“预期BEGIN_OBJECT但BEGIN_ARRAY”,我猜是因为钥匙的存在。任何想法我应该如何解决它?

回答

1

创建一个具有key属性的类,该类的类型为String[]并反序列化为该类。

public class Thing 
{ 
    private String[] key; 

    public String[] getKey() { 
     return key; 
    } 
} 

Thing thing = gson.fromJson(json, Thing.class); 
+0

我想过这个,但我试图避免创建一个新的类,因为我只需要一个简单的String []。可能吗? – Heisenberg

+0

@Heisenberg你可以在进行反序列化之前修改json字符串,但实际上我认为你应该将数据反序列化为它所代表的类型。如果这个类真的困扰你,那么可以在'gson'周围创建一个包装器,反序列化为一个内部类,然后返回包含在其中的'String []'。 – tvanfosson

+0

不,创建一个新班级不是一个大问题,但我想知道是否有更直接的方法来做到这一点。如果没有更聪明的解决方案,我将创建该类... – Heisenberg

1

由于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的原因。