簡體   English   中英

解析Java中一行存在的多個JSON對象

[英]Parsing multiple JSON objects that exist in one line in Java

我目前正在使用 OMDB API,它可以將 get-queries 作為 JSON 對象或 XML 返回。 使用 JSON 是我想學習的東西,它通常似乎是我想要做的最好的解決方案。 我希望的實現是允許用戶搜索一部電影,並且 select 是列表中正確的一個。 我目前正在使用 google.gson 庫。

我遇到的問題是,使用 OMDB 按標題搜索電影(此示例為“batman”)返回以下字符串:

{"Search":[{"Title":"Batman Begins","Year":"2005","imdbID":"tt0372784","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BOTY4YjI2N2MtYmFlMC00ZjcyLTg3YjEtMDQyM2ZjYzQ5YWFkXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"},{"Title":"Batman v Superman: Dawn of Justice","Year":"2016","imdbID":"tt2975590","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BYThjYzcyYzItNTVjNy00NDk0LTgwMWQtYjMwNmNlNWJhMzMyXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"},{"Title":"Batman","Year":"1989","imdbID":"tt0096895","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg"},{"Title":"Batman Returns","Year":"1992","imdbID":"tt0103776","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BOGZmYzVkMmItM2NiOS00MDI3LWI4ZWQtMTg0YWZkODRkMmViXkEyXkFqcGdeQXVyODY0NzcxNw@@._V1_SX300.jpg"},{"Title":"Batman Forever","Year":"1995","imdbID":"tt0112462","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BNDdjYmFiYWEtYzBhZS00YTZkLWFlODgtY2I5MDE0NzZmMDljXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_SX300.jpg"},{"Title":"Batman & Robin","Year":"1997","imdbID":"tt0118688","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMGQ5YTM1NmMtYmIxYy00N2VmLWJhZTYtN2EwYTY3MWFhOTczXkEyXkFqcGdeQXVyNTA2NTI0MTY@._V1_SX300.jpg"},{"Title":"The Lego Batman Movie","Year":"2017","imdbID":"tt4116284","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMTcyNTEyOTY0M15BMl5BanBnXkFtZTgwOTAyNzU3MDI@._V1_SX300.jpg"},{"Title":"Batman: The Animated Series","Year":"1992–1995","imdbID":"tt0103359","Type":"series","Poster":"https://m.media-amazon.com/images/M/MV5BOTM3MTRkZjQtYjBkMy00YWE1LTkxOTQtNDQyNGY0YjYzNzAzXkEyXkFqcGdeQXVyOTgwMzk1MTA@._V1_SX300.jpg"},{"Title":"Batman: Under the Red Hood","Year":"2010","imdbID":"tt1569923","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BNmY4ZDZjY2UtOWFiYy00MjhjLThmMjctOTQ2NjYxZGRjYmNlL2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyNTAyODkwOQ@@._V1_SX300.jpg"},{"Title":"Batman: The Dark Knight Returns, Part 1","Year":"2012","imdbID":"tt2313197","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMzIxMDkxNDM2M15BMl5BanBnXkFtZTcwMDA5ODY1OQ@@._V1_SX300.jpg"}],"totalResults":"490","Response":"True"}

到目前為止,我已經設法使用sendGetRequest(requestURL).substring(11, sendGetRequest(requestURL).length()-41);刪除了{"Search":[ and ],"totalResults":"490","Response":"True"}部分sendGetRequest(requestURL).substring(11, sendGetRequest(requestURL).length()-41); ,但我似乎仍然無法將字符串解析為 JSON。 我嘗試使用帶有各種正則表達式的 String.split 和 Matcher/Pattern 來分離 JsonObjects。 我也嘗試過 JSONArray,但無濟於事。

我是使用 JSON 的新手,所以我不太可能遺漏一些明顯的東西或完全誤解 JSON。

首先根據您的需要定義一個新的自定義 class:

public class YourClass {
    private String Title;
    private String Year;
    private String imdbID;
    private String Type;
    private String Poster;

    // Add Getters and Setters
    // Add toString() method
}

然后你可以簡單地解析你的 JSON:

ObjectMapper objectMapper = new ObjectMapper();

List<YourClass> yourClassList = objectMapper.readValue("Your JSON String", new TypeReference<ArrayList<YourClass>>() {});

for (YourClass yourClass: yourClassList) {
    System.out.println(yourClass);
}

PS:請記住,您不能像您在問題中所說的那樣從 JSON 中刪除括號[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM