【问题标题】:Gson: Parsing String[]Gson:解析字符串[]
【发布时间】:2013-10-25 17:57:03
【问题描述】:

我正在使用 Gson 库来解析 JSON 对象。特别是,我有一个这样的 JSON:

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

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

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

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

【问题讨论】:

    标签: json parsing gson


    【解决方案1】:

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

    public class Thing
    {
        private String[] key;
    
        public String[] getKey() {
            return key;
        }
    }
    
    Thing thing = gson.fromJson(json, Thing.class);
    

    【讨论】:

    • 我已经考虑过这个问题,但我试图避免创建一个新类,因为我只需要一个简单的 String[]。有可能吗?
    • @Heisenberg 您可以在进行反序列化之前修改 json 字符串,但实际上我认为您应该将数据反序列化为它所代表的类型。如果这个类真的让你感到困扰,那么可能会围绕gson 创建一个包装器,反序列化为一个内部类,并返回其中包含的String[]
    • 不,创建一个新类不是什么大问题,但我想知道是否有更直接的方法可以做到这一点。如果没有更智能的解决方案,我将创建该类...
    【解决方案2】:

    由于 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));
    

    当然,这段代码运行时没有错误,并且避免了额外的类,但是想想如果里面有一些回车会发生什么。 它会中断,除非您在替换调用中使用正则表达式。在这一点上,我更喜欢添加一个类而不是考虑正确的正则表达式,让 Gson 完成整个工作。

    我将此添加为回复而不是评论,以便有足够的空间来解释我自己,但此答案不应被视为正确的回复,而应视为使用不当的技巧。多了解 Gson 的原因会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多