Есть несколько сторонних инструментов, которые делают то, что вы хотите, но вы также можете использовать Java EE Java API для обработки JSON (иногда вызывающе смущающе известный как JSON-P) для обработки данных JSON URL,не зная структуры этих данных.
Вот код, который использует код в OP в качестве отправной точки:
package com.unthreading;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import javax.json.Json;
import javax.json.stream.JsonParser;
public class App {
public static void main(String[] args) throws IOException {
StringBuilder jsonData = new StringBuilder();
URL url = new URL("https://jsonplaceholder.typicode.com/todos/1");
try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));) {
String line;
while ((line = br.readLine()) != null) {
jsonData.append(line);
}
}
new App().processUnknownJson(jsonData.toString());
}
private void processUnknownJson(String jsonData) {
System.out.println("jsonData:" + jsonData);
JsonParser parser = Json.createParser(new StringReader(jsonData));
while (parser.hasNext()) {
JsonParser.Event event = parser.next();
switch (event) {
case START_ARRAY:
case END_ARRAY:
case START_OBJECT:
case END_OBJECT:
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_TRUE:
System.out.println(event.toString());
break;
case KEY_NAME:
System.out.print(event.toString() + " " + parser.getString() + " - ");
break;
case VALUE_STRING:
case VALUE_NUMBER:
System.out.println(event.toString() + " " + parser.getString());
break;
default:
System.out.println("Unexpected event: " + event.toString());
}
}
}
}
Это вывод, показывающий строку JSON, возвращенную изURL и результаты разбора этой строки на пары ключ / значение:
jsonData:{ "userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}
START_OBJECT
KEY_NAME userId - VALUE_NUMBER 1
KEY_NAME id - VALUE_NUMBER 1
KEY_NAME title - VALUE_STRING delectus aut autem
KEY_NAME completed - VALUE_FALSE
END_OBJECT
Код разбора взят из примера Oracle: Чтение данных JSON с использованием анализатора .
Я создал приложение как простой проект Maven, используя этот pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.unthreading</groupId>
<artifactId>myjsonparser</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>myjsonparser</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.json/javax.json-api -->
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>[1.1.2,)</version>
</dependency>
</dependencies>
</project>