簡體   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