Это может показаться глупым вопросом, но какой самый простой способ прочитать и проанализировать JSON из URL в Java?
В Groovy это вопрос нескольких строк кода. Примеры Java, которые я нахожу, смехотворно длинные (и имеют огромный блок обработки исключений).
Все, что я хочу сделать, это прочитать содержимое этой ссылки.
Переведено автоматически
Ответ 1
Используя артефакт Maven org.json:json я получил следующий код, который, на мой взгляд, довольно короткий. Не настолько короткий, насколько это возможно, но все же пригодный для использования.
Вот несколько альтернативных версий с Jackson (поскольку существует более одного способа, которым вам могут понадобиться данные в виде):
ObjectMappermapper=newObjectMapper(); // just need one // Got a Java class that data maps to nicely? If so: FacebookGraphgraph= mapper.readValue(url, FaceBookGraph.class); // Or: if no class (and don't need one), just map to Map.class: Map<String,Object> map = mapper.readValue(url, Map.class);
И, в частности, обычный случай (IMO), когда вы хотите иметь дело с объектами Java, может быть выполнен в виде одной строки:
Другие библиотеки, такие как Gson, также поддерживают однострочные методы; странно, почему многие примеры показывают гораздо более длинные разделы. И что еще хуже, во многих примерах используется устаревшая библиотека org.json; возможно, это было первое, что появилось, но есть полдюжины лучших альтернатив, так что причин для ее использования очень мало.
Вот пример. Я собираюсь зайти на этот бесплатный веб-сайт geolocator, проанализировать json и отобразить свой почтовый индекс. (просто поместите этот материал в основной метод, чтобы протестировать его)
StringsURL="http://freegeoip.net/json/"; //just a string
// Connect to the URL using java's native library URLurl=newURL(sURL); URLConnectionrequest= url.openConnection(); request.connect();
// Convert to a JSON object to print data JsonParserjp=newJsonParser(); //from gson JsonElementroot= jp.parse(newInputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element JsonObjectrootobj= root.getAsJsonObject(); //May be an array, may be an object. Stringzipcode= rootobj.get("zip_code").getAsString(); //just grab the zipcode
Ответ 4
Если вы не возражаете против использования пары библиотек, это можно сделать в одной строке.