Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在json中指定特定的对象路径_Java_Json_Scala_Json4s - Fatal编程技术网

Java 如何在json中指定特定的对象路径

Java 如何在json中指定特定的对象路径,java,json,scala,json4s,Java,Json,Scala,Json4s,我使用json4s将json解析为我的scala case类对象,第一个非常有效: case class Person(Id: String, name: String) val personJSON = """[ {"Id": "1","name": "john"}, {"Id": "2","name": "george"}, {"Id": "3","name": "tom"},

我使用json4s将json解析为我的scala case类对象,第一个非常有效:

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是一个包含对象的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中的“动物:”对象

我的想法是这样的:

val listOfAnimalsAsObjects = JsonMethods.parse(animalsJSON[0]).extract[List[Animal]]
class AnimalListContainer
{
    List<Animal> Animals;
    public AnimalListContainer()
    {
        Animals = new ArrayList<>();
    }
}
但它不起作用……我如何在json中指定我想要“动物:”对象


我不能改变json,这正是我得到它的方式


谢谢

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

大概是这样的:

val listOfAnimalsAsObjects = JsonMethods.parse(animalsJSON[0]).extract[List[Animal]]
class AnimalListContainer
{
    List<Animal> Animals;
    public AnimalListContainer()
    {
        Animals = new ArrayList<>();
    }
}

(未经测试的代码-很抱歉出现语法错误)。

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

大概是这样的:

val listOfAnimalsAsObjects = JsonMethods.parse(animalsJSON[0]).extract[List[Animal]]
class AnimalListContainer
{
    List<Animal> Animals;
    public AnimalListContainer()
    {
        Animals = new ArrayList<>();
    }
}

(未测试的代码-抱歉出现语法错误)。

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

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

我无法更改json,这正是我在@Justin获得它的方式Conroy@jackmiao更新了答案来处理不改变的JSON。我不能改变JSON,我就是这样得到它的@JustinConroy@jackmiao更新了答案以处理不更改的JSON。