2010-10-19 5 views
2

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

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

+5

Что именно является основанием для «лишней библиотеки» отвращения? Основная проблема, возможно, придется решать где-то в другом месте. – BalusC

ответ

3

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

+1

+1 для использования Gson. – ColinD

+1

Для разбора JSON спецификация находится здесь: http://www.ietf.org/rfc/rfc4627.txt – McDowell

2

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

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

+0

О, я полностью забыл API 'javax.script' Java 1.6. Однако я полностью согласен с тем, что это оставляет отверстия для инъекций открытыми. Я бы не использовал его. Независимо от +1 для просветления. – BalusC

2

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

В качестве примера, для использования 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"); 
+0

Ссылки мертвы, как вы думаете, вы можете их обновить? Благодарю. – stefanobaghino

2

К сожалению, на родной JSON-поддержке was delayed past Java 9.

Но ради Фейр-плей здесь ясно Java 8 Hacky решение, используя 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] 

Credits:

Effective way to pass JSON between java and javascript

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

 Смежные вопросы

  • Нет связанных вопросов^_^