首页 文章

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

提问于
浏览
0

根据请求参数,图片中选定粉红色的“21231”是变化部分 .

我是新手,在我的学生作业中,我必须在Spring Boot中使用各种Web API资源作为JSON和java . 我的任务之一:我必须从具有文章特定名称的维基百科API请求中获取艺术家描述 . 这里我将文章名称作为请求中的参数:例如“Nirvana_(band)”as = (在请求中可能有其他文章名称作为参数):

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

显示JSON响应:如图所示 .
JSON
这里我只需要在图片浅绿色中提取一个字符串:"< p >< b>Nirvana was an American rock … < /p>\ n< p>"

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

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

2 回答

  • 2

    如果您有动态键/值对,则可以使用类似 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, ...
    }
    

    这将导致 Query 对象包含 Map<String, Page> ,其中键是 "21231" ,值是正确的 Page 对象 .

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

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

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

  • 1

    您还可以使用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>
    

相关问题