繁体   English   中英

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

[英]How to extract a specific part from JSON response with changing fields names in JSON structure (as in this example) with Java in Spring Boot?

图片上选择为粉红色的“ 21231”是一个变化部分,具体取决于请求参数。

我是新手,在我的学生作业中,我必须在Spring Boot中使用Java使用各种Web API资源作为JSON。 我的任务之一:我必须从具有给定文章名称的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 在这里,我只需要提取淡绿色图片上选择的字符串即可:“ <p> <b>“涅磐”是美国的岩石……</ p> \\ n <p>”

如果我想使用restTemplate.getForObject(),那么我的问题将在这里:JSON结构的标题为“ 21231”(图像上的对象选择为粉红色),但有所不同:我不知道如何将其映射到对象。

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

如果具有动态键/值对,则可以使用类似Map的结构来映射对象,例如:

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, ...
}

这将导致一个包含Map<String, Page>Query对象Map<String, Page>其中键为"21231" ,该值为适当的Page对象。

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

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

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

您还可以使用Jquery进行查询并解析前端层的响应。 以下是以下代码,可在Web控制台上打印实际内容(根据您的要求)。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
   var value='India'; //you can pass dynamic value here 
   var playListURL = 'http://en.wikipedia.org/w/api.php?format=json&action=query&titles='+value+'&prop=revisions&rvprop=content&callback=?';

    $.getJSON(playListURL ,function(data) {
        $.each(data.query.pages, function(i, item) {
        var responseText =  item.revisions[0];
        $.each(responseText,(index,item) => {
            if(index == '*'){
                console.log('real value=>'+item); 
            }
            console.log(index);
        });
        console.log(responseText.contentformat);
        });
    });
});
</script>
</head>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM