java - 如何在 Spring Boot 中使用 Java 通过更改 JSON 结构中的字段名称(如本例所示)从 JSON 响应中提取特定部分?

标签 java json spring-boot

图中选中的粉色“21231”是变化的部分,具体取决于请求参数。

我是新手,在我的学生作业中,我必须在 Spring Boot 中使用 JSON 和 java 来使用各种 Web API 资源。 我的任务之一:我必须从对 Wikipedia API 的请求中获取艺术家描述,其中包含文章的给定名称。在这里,我将文章名称作为请求中的参数:例如“Nirvana_(band)”作为 ={article}(请求中可能还有其他文章名称作为参数):

https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&exintro=true&redirects=true&titles={article}

显示 JSON 响应:如图所示。 JSON 这里我只需要提取出图中淡绿色选中的字符串即可: “

Nirvana 是美国摇滚乐......

\n

如果我想使用 restTemplate.getForObject() 我的问题将在这里:JSON 结构将在标题“21231”方面有所变化(图像上选择的对象为粉红色):我不知道如何映射对此表示反对。

因此我不知道在这种情况下我必须使用什么方法(方法)? (使用这样的 JSON 以便从中获取特定值)。有什么好的建议吗?谢谢!

最佳答案

如果你有一个动态键/值对,你可以使用 Map -like 结构来映射您的对象,例如:

public class Page {
    private int pageId;
    private int ns;
    private String title;
    private String extract;

    // Getters, setters, ...
}

public class Query {
    private Map<String, Page> pages;

    // Getters, setters, ...
}

这将导致 Query包含 Map<String, Page> 的对象关键是 "21231"并且该值是适当的 Page对象。

如果您希望它只包含一个值,您可以使用 Java 8 流:

query.getPages()
    .values().stream()
    .findAny()
    .orElseThrow(() -> new RuntimeException("There is no page"));

或者,您可以创建自己的数据结构(如 PagePair)并编写自定义反序列化器,但这需要更多工作。

关于java - 如何在 Spring Boot 中使用 Java 通过更改 JSON 结构中的字段名称(如本例所示)从 JSON 响应中提取特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49941130/

相关文章:

java - 将 'java.lang.ClassNotFoundException: com.mysql.jdbc.Driver' 添加到构建路径并使用 Class.forName() 注册后如何修复它;

java - SQLite 数据库游标返回错误的资源 ID

java - 模型映射器 - 使用自定义方法

java - 表格:select in spring MVC

java - Swing - 获取mouseReleased下的新组件

json - 如何在 Go 中解析奇怪的 JSON

json - jq 从数组中条件删除

json - 如何在 Github Wiki 中设置 JSON block 的样式?

java - Spring Scheduler 示例(Spring boot 和 Vaadin 14 项目)

java - 如何在 spring boot 远程 shell 中将参数和选项传递给自定义远程 shell 命令?