繁体   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