解析或转换 JSON 响应中 JSON 对象内嵌入的 HTML 代码
Parse or convert HTML code embedded inside JSON object in the JSON response
我有以下 URL :
https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=The%20Matrix
其中 returns JSON 响应 HTML 代码 嵌入 JSON对象(参见link)。
如何使用 java 从 HTML 部分 检索 演员、导演等详细信息?
如果可能,如何使用 java 将 Html 部分转换为 JSON?
或者有什么方法可以更改 url 本身以获取可读 JSON 格式的电影数据?
这是一个使用 jsoup 解析 HTML 和 jackson 解析 JSON 的解决方案:
public static void main(String[] args) throws IOException {
// Extract JSON string
String body = Jsoup.connect("https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=The%20Matrix")
.ignoreContentType(true).execute().body();
// Extract HTML string from JSON
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
JsonNode targetNode = mapper.readTree(body).get("parse").get("text").get("*");
// Generic but fragile function to extract specific details
Function<String, String> retrieveDetailsOf = detailsOf ->
Jsoup.parse(targetNode.asText())
.select(".infobox tr th:contains(" + detailsOf + ") ~ td a[title]")
.stream().map(e -> e.attr("title")).collect(Collectors.toList()).toString();
System.out.println(retrieveDetailsOf.apply("Directed by"));
System.out.println(retrieveDetailsOf.apply("Produced by"));
System.out.println(retrieveDetailsOf.apply("Music by"));
System.out.println(retrieveDetailsOf.apply("Starring"));
}
输出:
[The Wachowskis]
[Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano]
依赖关系:
implementation("org.jsoup:jsoup:1.12.2")
implementation("com.fasterxml.jackson.core:jackson-core:2.10.2")
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.2")
请注意,内容结构的任何更改大多会导致中断。如果可用,请使用官方电影详细信息 API。
我有以下 URL :
https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=The%20Matrix
其中 returns JSON 响应 HTML 代码 嵌入 JSON对象(参见link)。
如何使用 java 从 HTML 部分 检索 演员、导演等详细信息?
如果可能,如何使用 java 将 Html 部分转换为 JSON?
或者有什么方法可以更改 url 本身以获取可读 JSON 格式的电影数据?
这是一个使用 jsoup 解析 HTML 和 jackson 解析 JSON 的解决方案:
public static void main(String[] args) throws IOException {
// Extract JSON string
String body = Jsoup.connect("https://en.wikipedia.org/w/api.php?action=parse§ion=0&prop=text&format=json&page=The%20Matrix")
.ignoreContentType(true).execute().body();
// Extract HTML string from JSON
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
JsonNode targetNode = mapper.readTree(body).get("parse").get("text").get("*");
// Generic but fragile function to extract specific details
Function<String, String> retrieveDetailsOf = detailsOf ->
Jsoup.parse(targetNode.asText())
.select(".infobox tr th:contains(" + detailsOf + ") ~ td a[title]")
.stream().map(e -> e.attr("title")).collect(Collectors.toList()).toString();
System.out.println(retrieveDetailsOf.apply("Directed by"));
System.out.println(retrieveDetailsOf.apply("Produced by"));
System.out.println(retrieveDetailsOf.apply("Music by"));
System.out.println(retrieveDetailsOf.apply("Starring"));
}
输出:
[The Wachowskis]
[Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, Hugo Weaving, Joe Pantoliano]
依赖关系:
implementation("org.jsoup:jsoup:1.12.2")
implementation("com.fasterxml.jackson.core:jackson-core:2.10.2")
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.2")
请注意,内容结构的任何更改大多会导致中断。如果可用,请使用官方电影详细信息 API。