【问题标题】:Parse json's element that can be different types using gson使用 gson 解析可以是不同类型的 json 元素
【发布时间】:2016-06-01 20:48:32
【问题描述】:

我有一个 json 对象,里面可以有一个可以是数组或布尔值的属性。所以我的问题是如何在解析时解析这个 json 而不会出现问题?

这就是我所说的:

 {
        "offerId": "24",
        "image1": "1452678081_56961bc195cf8.jpg",
        "image2": "1452678081_56961bc195f38.jpg",
        "image3": "1452678081_56961bc196124.jpg",
        "featured": false,
        "hide_button": false,
        "categoryId": "1",
        "locations": [
            {
                "address": "Problemveien 13, 0313 Oslo",
                "long": "10.722052800000029",
                "latitude": "59.9409999"
            },
            {
                "address": "Akersgata 68, 0180 Oslo",
                "long": "10.744572199999993",
                "latitude": "59.9174608"
            },
            {
                "address": "Trimveien 4, 0372 Oslo",
                "long": "10.724201200000039",
                "latitude": "59.9466293"
            },
            {
                "address": "Sandakerveien 116, 0484 Oslo",
                "long": "10.769448300000022",
                "latitude": "59.9483484"
            },
            {
                "address": "Vulkan 15, 0178 Oslo",
                "long": "10.75169040000003",
                "latitude": "59.9223593"
            }
        ]
    }

这就是对象内部没有位置数组时的外观:

{
        "offerId": "25",
        "image1": "1452678113_56961be1d6774.jpg",
        "image2": "1452678113_56961be1d694f.jpg",
        "image3": "1452678113_56961be1d6ae0.jpg",
        "featured": false,
        "hide_button": false,
        "categoryId": "1",
        "locations": false
    }

再说一次,我该如何解析 locations 元素,因为它可以是布尔值或数组?有没有办法使用谷歌 gson 来解析这个?

谢谢

【问题讨论】:

  • 这听起来并不像一个概念。所以不知道他们为什么这样做。他们应该将位置保留为空数组。
  • @Doomsknight 是的,我知道,但有解决方案吗?
  • 据我所知没有。不与 gson。因为它映射到一个定义的对象,它必须是 1 而不是 2 类型

标签: android json retrofit android-json gson


【解决方案1】:

我不明白你想要什么,但是试试这个。 它可以解析任何 json 对象,但你必须在获取位置时检查类型和转换。

class JavaBean {
    Object locations;
}

【讨论】:

    【解决方案2】:

    创建如下类

    public class Location {
        String address;
        String long; // change the name of variable here and in json as well.
        String latitude;
    }
    
    public class MyClass {
        String offerId;
        String image1;
        String image2;
        String image3;
        boolean featured;
        boolean hide_button;
        String categoryId;
        List<Location> locations;
    }
    

    您将能够使用 Gson 进行解析。

    注意

    1. 我建议你把你的location对象中的属性long重命名为long是java中的关键字,ide会报错。

    2. 我还建议你将location数组设为空json数组,而不是发送false,否则Gson会抛出异常。

    希望这会对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多