【问题标题】:Read a JSON file using JACKSON使用 JACKSON 读取 JSON 文件
【发布时间】:2018-05-12 08:33:27
【问题描述】:

我想读取收到的 JSON 文件。

这就是JSON文件的形式:

{
    "name": "list_name"
    "items": [
        {
            "id": 4
        },
        {
            "id": 3
        },
        {
            "id": 2
        },
    ]
} 

我想解析代表电影列表的 JSON 以及电影的 id。我想提取 ID 和名称。

@PUT
@Path("/")
@Consumes(MediaType.APPLICATION_JSON)
public Response deleteMoviesFromList2(@Context HttpServletRequest req) Long movieListId) {
    Long userId = getLoggedUser(req);
    getLoggedUser(req);

    final String json = "some JSON string";
    final ObjectMapper mapper = new ObjectMapper();


    return buildResponse(listMovieService.remove(¿?));
}

我想提取 id 但不知道怎么做。

【问题讨论】:

  • 如果我记得你只需要添加杰克逊罐到类路径和球衣将使用它们将任何 json 转换为你想要的任何类,反之亦然
  • 当然你的类需要是一个(伪)JavaBean

标签: java json parsing


【解决方案1】:

您可以像这样使用 ObjectMapper 类转换 json 字符串。

ObjectMapper objectMapper = new ObjectMapper();

String carJson =
    "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";

try {
    Car car = objectMapper.readValue(carJson, Car.class);

    System.out.println("car brand = " + car.getBrand());
    System.out.println("car doors = " + car.getDoors());
} catch (IOException e) {
    e.printStackTrace();
}

在这里,您可以将 Car 类替换为您的自定义 Movie 类,然后就完成了。

【讨论】:

  • 但我没有 carJson var。我收到了来自 PUT 调用的 JSON。
  • 您可以将 json 字符串放入某个字符串变量中,然后使用对象映射器转换为等效对象。
【解决方案2】:

如果你定义了一个电影类,比如:

class Movie {
    String id;
    //getters
    //setters
}

还有一个电影列表类:

class MovieList {
    String name;
    List<Movie> items;
    //getters
    //setters
}

然后您可以使用带有 inputStream 的对象映射器:

try(InputStream fileStream = new FileInputStream("movielist.json")) {
    MovieList list = mapper.readValue(fileStream, MovieList.class);
}

ObjectMapper 的 readValue 有一个接受输入流的重载版本,就是上面使用的那个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-01
    • 2018-04-06
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2015-01-19
    • 2014-06-11
    • 2016-12-08
    相关资源
    最近更新 更多