代码之家  ›  专栏  ›  技术社区  ›  Surya Suravarapu

使用Lift JSON解析动态值

  •  3
  • Surya Suravarapu  · 技术社区  · 16 年前

    让我用一个例子来解释这个问题。如果我有如下JSON:

    “person1”:“name”:“name one”, “address”:“street”:“一些 “街道”,“城市”:“某个城市”,
    “person2”:“name”:“name 2”, “address”:“street”:“其他 “街道”,“城市”:“其他城市”

    [对人数没有限制,输入json可以有更多的人]

    我可以通过执行以下操作将此JSON提取到Persons对象

    var persons=分析(res).extract[t]

    以下是相关的案例类:

    案例类地址(街道:字符串, 城市:字符串
    案例类人员(姓名: 字符串,地址:地址,子项: 列表[儿童]
    案例课 人(人1:人,人2: 人)

    问题: 上面的场景工作得非常好。但是,需要的是键/值对中的键是动态的。所以在提供的示例JSON中, 人物角色1 人物2 可能是任何东西,我需要动态地阅读它们。对于人类来说,考虑到这种动态性,最好的结构是什么?

    1 回复  |  直到 16 年前
        1
  •  7
  •   Joni    16 年前

    解析的一种方法是映射根JSON对象的子元素:

    scala> parse(res).children.map(_.extract[Person])
    res3: List[Person] = List(Person(Name One,Address(Some Street,Some City)), Person(Name Two,Address(Some Other Street,Some Other City)))
    

    如果需要保留字段名,请这样做:

    scala> Map() ++ parse(res).children.map { case f: JField => (f.name, f.extract[Person]) }
    res4: scala.collection.immutable.Map[String,Person] = Map(person1 -> Person(Name One,Address(Some Street,Some City)), person2 -> Person(Name Two,Address(Some Other Street,Some Other City)))
    

    注意,当我们开始使用2.8功能时,以下直接方法应该有效:

    parse(res).extract[Map[String, Person]]
    
    推荐文章