Вы обязательно должны проверить разные подходы и библиотеки.Если вы действительно позаботились о проверке производительности: Gson
, Jackson
и JsonPath
библиотеки, чтобы сделать это, и выберите самую быструю.Определенно, вам нужно загрузить весь файл JSON
на локальный диск, возможно, папку TMP
и проанализировать его после этого.
Простое решение JsonPath
может выглядеть следующим образом:
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import java.io.File;
public class JsonPathApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
DocumentContext documentContext = JsonPath.parse(jsonFile);
System.out.println("" + documentContext.read("$.a"));
System.out.println("" + documentContext.read("$.b"));
System.out.println("" + documentContext.read("$.d"));
}
}
Обратите внимание, что я не создаю POJO
, просто читаю заданные значения, используя функцию JSONPath
аналогично XPath
.То же самое вы можете сделать с Jackson
:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
public class JsonPathApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(jsonFile);
System.out.println(root.get("a"));
System.out.println(root.get("b"));
System.out.println(root.get("d"));
}
}
Нам не нужно JSONPath
, потому что нужные нам значения находятся непосредственно в root
узле.Как видите, API
выглядит почти так же.Мы также можем создать POJO
структуру:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.math.BigDecimal;
public class JsonPathApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
Pojo pojo = mapper.readValue(jsonFile, Pojo.class);
System.out.println(pojo);
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Pojo {
private Integer a;
private BigDecimal b;
private Integer d;
// getters, setters
}
Несмотря на это, обе библиотеки позволяют считывать JSON
полезную нагрузку непосредственно из URL
. Я предлагаю скачать ее на другом шаге, используя лучший подход, который вы можете найти.Для получения дополнительной информации прочитайте эту статью: Загрузка файла с URL в Java .