Попытка разобрать JSON, вложенный с помощью Gson - PullRequest
0 голосов
/ 06 ноября 2011

Вот что я пытаюсь сделать:

public static final String json = "[{'quotes':[{'quote':'sdfsdfsdfdsf!','source':'sdfsdfsdfsdfsdf'},{'quote':'sdfsdfsdfsdf!','source':'-sdfsfsdf'},{'quote':'Isdfsf','source':'sfsfsf'}]}]";

Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(json).getAsJsonArray();

       Event event = gson.fromJson(array.get(0), Event.class);


        System.out.println("Using Gson.fromJson() to get:" + event.getQuotes());

А вот класс события:

static class Event {
        private JsonArray quotes;
        private Event(JsonArray quotes) {
        this.quotes = quotes;

        }
        public JsonArray getQuotes() {
            return quotes;
        }
        public void setQuotes(JsonArray quotes) {
            this.quotes = quotes;
        }

      }

По сути, я пытаюсь разобрать содержимое.Возьмите «цитаты» и поместите содержимое в другой JsonArray, что это, не так ли?Однако приложение вылетает, потому что я не думаю, что оно работает таким образом.

Есть идеи?Я тяну волосы за это.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Неверная строка JSON, просто проверьте ее здесь: http://jsonlint.com/

Итак, в первую очередь ваша строка JSON должна выглядеть следующим образом:

[{"quotes":[{"quote":"sdfsdfsdfdsf!","source":"sdfsdfsdfsdfsdf"},
{"quote":"sdfsdfsdfsdf!","source":"-sdfsfsdf"},{"quote":"asdfsf","source":"sfsfsf"}]}]

А если вы хотите хранить в строковой переменной, то:

public static final String json = "[{\"quotes\":[{\"quot\e":\"sdfsdfsdfdsf!\",\"source\":\"sdfsdfsdfsdfsdf\"},
    {\"quote\":\"sdfsdfsdfsdf!\",\"source":\"-sdfsfsdf\"},{\"quote\":\"asdfsf\",\"source\":\"sfsfsf\"}]}]";

Разбор JSON с использованием собственных классов (не с использованием GSON или любого API):

JsonObject obj = new JsonObject(json);
JsonArray array = obj.getJsonArray("quotes");

for(int i=0; i<array.length; i++)
{
   JsonObject subObj = array.getJsonObject(i);
   String strQuotes = subObj.getString("quote");
   String strSource = subObj.getString("source");
}
0 голосов
/ 12 ноября 2011

Я пытаюсь разобрать содержимое.Возьмите «кавычки» и поместите содержимое в другой JsonArray

Я бы использовал другой подход к обработке этой структуры данных, если нет веских причин сделать иное.

Поскольку использование Gson возможно, то используйте его для того, что у него хорошо получается, и забудьте о работе с компонентами JSON API, такими как JsonArray и JsonObject.Gson хорош для очень простого связывания данных JSON со структурой данных Java.Итак, я мог бы воспользоваться подходом, подобным следующему, чтобы затем разрешить простое манипулирование структурой данных Java без проблем JSON.

Входной JSON

[
    {
        "quotes": [
            {
                "quote": "I never think of the future. It comes soon enough.",
                "source": "Albert Einstein"
            },
            {
                "quote": "A riot is the language of the unheard.",
                "source": "Martin Luther King, Jr."
            },
            {
                "quote": "A hero is someone who understands the responsibility that comes with his freedom.",
                "source": "Bob Dylan"
            }
        ]
    }
]

Java-код

import java.io.FileReader;

import com.google.gson.Gson;

public class GsonFoo
{
  public static void main(String[] args) throws Exception
  {
    Gson gson = new Gson();
    Event[] events = gson.fromJson(new FileReader("input.json"), Event[].class);
    System.out.println(events[0].quotes[0].quote);
    System.out.println(events[0].quotes[0].source);
  }
}

class Event
{
  Quote[] quotes;
}

class Quote
{
  String quote;
  String source;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...