возможно ли обрабатывать ответы JSON только с помощью JDK или HttpComponents? - PullRequest
2 голосов
/ 19 октября 2010

мы обновляем наше веб-приложение, чтобы использовать Facebook API Graph, который возвращает ответы JSON. Однако мы не хотим добавлять зависимости в библиотеку JSON, если у нас нет другого выбора. Для http-запросов на стороне сервера мы используем Apache HttpComponents.

Таким образом, мой вопрос заключается в том, какие классы (если они есть) в JDK и / или в компонентах HttpComponents можно использовать для обработки ответов JSON? Фрагменты кода приветствуются:)

Ответы [ 4 ]

3 голосов
/ 27 апреля 2017

К сожалению, собственная поддержка JSON была отложена после Java 9 .

Но ради спортивного мастерства здесь есть простое хакерское решение Java 8 с использованием Nashorn движка JavaScript без какой-либо внешней зависимости:

String json = "{\"foo\":1, \"bar\":\"baz\"}";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Object o = engine.eval(String.format("JSON.parse('%s')", json));
Map<String, String> map = (Map<String, String>) o;
System.out.println(Arrays.toString(map.entrySet().toArray()));
// [foo=1, bar=baz]

Поскольку Java 8u60 JSON.parse можно заменить на Java.asJSONCompatible, что улучшает обработку массивов JSON.

Кредиты:

Эффективный способ передачи JSON между java и javascript

https://dzone.com/articles/mapping-complex-json-structures-with-jdk8-nashorn

3 голосов
/ 19 октября 2010

Это возможно.Поскольку JSON является допустимым синтаксисом JavaScript, вы можете использовать встроенный интерпретатор JavaScript через API-интерфейс сценариев для создания и построения графа объекта, пройдитесь по нему (например, с помощью шаблона посетителя для передачи данных в объект Java).

Однако вам нужно доверять данным, или вы оставляете себя открытым для атак внедрения кода.Для меня это не будет адекватной заменой правильного парсера JSON.

3 голосов
/ 19 октября 2010

Там нет - это API javax.script, как упомянуто @McDowell, но синтаксис JSON довольно тривиален.Вы можете написать синтаксический анализатор на основе стека, который определяет строку JSON char-by-char и преобразует массивы JSON [] в Object[] или List<Object> и объекты JSON {} в Map<String, Object>.Это хорошее учебное упражнение.Однако, когда вы не хотите беспокоиться о долгосрочной надежности и обслуживании, я бы предложил выбрать одну из библиотек Java, перечисленных внизу на этой странице .Мой личный фаворит - Google Gson .Он может красиво преобразовывать сложные структуры JSON в полноценные и повторно используемые Javabeans.

2 голосов
/ 13 декабря 2011

Я думаю, вы ищете пакет org.json.Вы можете получить источник здесь и просто включить несколько файлов в ваш проект, у него нет никаких зависимостей.Это позволит вам создавать и анализировать JSON.Javadocs хорошо сделаны и могут быть найдены здесь .

Например, для использования json вы можете использовать токен и преобразовать необработанную строку в JSONObject.Затем вы можете получить доступ к массивам по индексу или по ключу.Вы можете получить доступ к вложенным массивам, получив их как JSONObject или JSONArray.

JSONTokener tokener = new JSONTokener(myJsonString);
JSONObject json = new JSONObject(tokener);

String error = json.get("error");
int errorCode = json.getInt("error_code");

JSONArray messages = json.getJsonArray("messages");

Обновление: источник также доступен по адресу GitHub

...