【问题标题】:how to specify specific object path in a json如何在 json 中指定特定的对象路径
【发布时间】:2016-10-09 13:30:30
【问题描述】:

我正在使用 json4s 将 json 解析为我的 scala 案例类对象,第一个效果很好:

case class Person(Id: String, name: String)

val personJSON = """[ {"Id": "1","name": "john"},
                      {"Id": "2","name": "george"},
                      {"Id": "3","name": "tom"},
                      {"Id": "4","name": "tammy"},
                      {"Id": "5","name": "melanie"}  ]""".stripMargin

val listOfPersonAsObjects = JsonMethods.parse(personJSON).extract[List[Person]]

完美运行,没问题。

但现在 json 是其中包含对象的一个​​:

case class Animal(name: String, age: String)

val animalsJSON = """{ "animals":[ {"name": "giraffe","age": "12"},
                       {"name": "lion","age": "4"},
                       {"name": "snake","age": "5"},
                       {"name": "tiger","age": "3"},
                       {"name": "elephant","age": "7"}] }""".stripMargin

所以现在我需要解析 json 中的“animals:”对象...

我的想法是这样的:

val listOfAnimalsAsObjects = JsonMethods.parse(animalsJSON[0]).extract[List[Animal]]

但它不起作用...如何指定我想要 json 中的“动物:”对象?

我无法更改 json,这正是我得到它的方式

谢谢!

【问题讨论】:

    标签: java json scala json4s


    【解决方案1】:

    有几个库可用于解析 JSON 路径。我使用了一个名为 OGNL 的 Apache 库。这不是最好的,也不是最有效的。它不再被积极开发,但它完成了工作。它比你需要做的要强大得多,但是对于你需要的,它非常简单。您可以轻松下载并将其集成到您的项目中。

    【讨论】:

      【解决方案2】:

      不适合您的 JSON 不是列表。它是一个包含列表的对象。因此,您的对象需要匹配该结构。

      类似这样的:

      class AnimalListContainer
      {
          List<Animal> Animals;
          public AnimalListContainer()
          {
              Animals = new ArrayList<>();
          }
      }
      

      然后当你尝试解析时:

      val animalListContainer = JsonMethods.parse(animalsJSON[0]).extract[AnimalListContainer]
      

      (未经测试的代码 - 如有任何语法错误,请见谅)。

      【讨论】:

      • 我无法更改 json,这正是我得到它的方式@Justin Conroy
      • @jackmiao 更新了处理不变 JSON 的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      相关资源
      最近更新 更多