2010-01-09 7 views
7

Я хотел бы знать, как разбирать фид JSON по элементам (например, url/title/description для каждого элемента). Я посмотрел на doc/api, но это мне не помогло.Parsing Json Feeds with google Gson

Это то, что я до сих пор

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

public class ImportSources extends Job { 
    public void doJob() throws IOException { 
     String json = stringOfUrl("http://feed.test/all.json"); 
     JsonObject jobj = new Gson().fromJson(json, JsonObject.class); 
     Logger.info(jobj.get("responseData").toString()); 
    } 
    public static String stringOfUrl(String addr) throws IOException { 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     URL url = new URL(addr); 
     IOUtils.copy(url.openStream(), output); 
     return output.toString(); 
    } 
} 

ответ

9

зависит от фактического формата JSON. Фактически вы можете просто создать пользовательский класс Javabean, который соответствует формату JSON. Любые поля в JSON могут быть отображены как String, Integer, Boolean и т. Д. Свойства Javabean. Любые массивы могут быть отображены как List. Любые объекты могут быть отображены как другое вложенное свойство Javabean. Это значительно облегчает дальнейшую обработку на Java.

Без примера строки JSON с вашей стороны, это только догадывается, как это будет выглядеть, поэтому я не могу привести здесь базовый пример. Но я писал подобные ответы, прежде чем здесь, вы можете найти полезным:

Gson имеет также User Guide, вы можете найти его полезным.

+0

Спасибо за ваш ответ, я попытался применить примеры к следующей ленте: http://www.stocktwits.com/ streams/all.json. Мне не удалось получить никаких других значений, кроме нуля. Нужно ли создавать две группы: поток и твиты? – Roch

0

Я не знаю, может ли GSON выполнять потоковое/инкрементное связывание (я думал, что это не так).

Но есть ли конкретная причина рассматривать эту конкретную библиотеку только? Другие библиотеки обработки Java JSON позволяют такую ​​обработку (вы можете проверить ссылки, которые другой ответ имеет для некоторых идей), так как это очень важная функция при обработке больших каналов.

+0

Ну, я использовал ROME для RSS-каналов, а используемая среда содержит gson, Thats, почему я пытаюсь ее использовать, но я открыт для любой другой библиотеки. – Roch

+0

Хорошо. Как я уже сказал, я считаю, что GSON выполняет полную привязку документа, но я не 100%. Для альтернативы, Джексон (http://jackson.codehaus.org) допускает инкрементное связывание, а также несколько других режимов работы. Принцип действия заключается в том, что вам нужно получить JsonParser для главного, перебрать основной массив или объект JSON и вызвать parser.readValueAs() для фактического привязки. Список рассылки пользователей может помочь с деталями, если в документации недостаточно указателей. – StaxMan

3

У Gson 1.4 есть новый API JsonStreamParser, который позволяет анализировать несколько объектов JSON один за другим из потока.

1

Вы можете создать соответствующие классы java для объектов json. Целое число, строковые значения могут быть отображены как есть. Json может быть проанализирован как this-

Gson gson = new GsonBuilder().create(); 
Response r = gson.fromJson(jsonString, Response.class); 

Вот http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html ПРИМЕР