【问题标题】:when geting objects from a Json with restlet how can I get different objects in case the Json chnges its structure从带有restlet的Json获取对象时,如果Json更改其结构,我如何获取不同的对象
【发布时间】:2014-07-25 21:12:23
【问题描述】:

我有一个具有某种层次结构的 Json,它在某些时候可以改变其结构。键 OnOff 可以有一个对象或一个数组,它可以有一个这样的数组:

"OnOff": [
              {
            "state": {
                     "last_update": 1401855332,
                     "value": "off"
                     }
              }
         ]

或者它只能有一个对象,像这样:

   "OnOff":
           {
          "state": {
                   "last_update": 1401855332,
                   "value": "off"
                   }
           }

这个想法是读取 json 并将其转换为带有 Restlet for android 的对象。我正在使用对象和接口,数组案例中的类由以下定义:

public class Capability {
    public List<Processor> OnOff;// or Processor[]
    public Capability(){}
}

并且在对象情况下定义为:

public class Capability {
    public Processor OnOff;
    public Capability(){}
}

加上接口和检索对象的代码。

任一定义都适用于其中一个 json,但不适用于另一个。有没有一种方法可以声明包装器或可以同时充当数组或对象的东西?是否有另一种使用 restlet 读取对象的方法,例如使用地图?

注意:我真的不想手动解析任何东西......

【问题讨论】:

    标签: java android json class restlet-2.0


    【解决方案1】:

    您可以调用 Resource#toObject(representation, Target1.class|Target2.class) 来尝试转换为这两个类。

    但这不清楚为什么您可以简单地依赖第二个可以处理单个和多个项目的 Capability 类。也许你不控制服务器?

    另一种选择是添加 Jackson 注释、一个基本抽象 Capability 类和两个子类 https://github.com/FasterXML/jackson-annotations

    【讨论】:

    • 刚刚看到文档,它应该可以工作,但我仍然不明白如何: // 包含 Java 类名 ("com.myempl.ImplClass") 作为 JSON 属性 "class"
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多