Как десериализовать строку JSON между библиотекой JSON.org с помощью библиотеки GSON

У меня проблема с использованием библиотеки GSON, которая является библиотекой json от Google. Надеюсь, кто-нибудь может дать мне подсказку.

Проблема заключается в том, что я использую функцию gson.fromJson(), пытаясь преобразовать строку json в указанный определенный класс.

Пример кода:

String jsonStr = "{name:"ABC", countries:["US"]}";  // Some Json string.
Gson gson = new Gson();
Example example = gson.fromJSON(jsonStr, Example.class);

class Example {
  // does no have no-arg constructor
  private String name;
  private Integer age;
  private JSONArray keywords;  // import org.json.JSONArray;
  private JSONArray countries;

  // other codes
}

Приведенный выше код является упрощенной версией моей проблемы. Проблема в функции fromJson(). В сообщении об ошибке говорится: «JsonParseException: обнаружен ожидающий объект [«US»]».

Не могу понять в чем проблема. Я думаю, может быть, gson не знает, как преобразовать строку в JSONArray. Потому что здесь JSONArray из другой библиотеки (org.json).

Пытаюсь разобраться в документах gson. Похоже, мне нужно написать код «Instance Creator».

Мне интересно, может ли другой дать мне какое-то решение. Спасибо.


person easycoder    schedule 22.05.2011    source источник
comment
Ваш код недействителен. У вас есть ABC и US, расположенные между строковыми литералами. Кроме того, если ваш JSON буквально {name:"ABC", countries:["US"]}, то у вас также недопустимый JSON.   -  person Thanatos    schedule 22.05.2011
comment
@Танатос. Извините за недопонимание. Я не тестирую этот код.   -  person easycoder    schedule 22.05.2011


Ответы (1)


Просто сделайте ключевые слова и страны типом списка Java. Я никогда не видел, чтобы org.json смешивался с gson. Обычно gson заменяет org.json, он не предназначен для совместного использования.

РЕДАКТИРОВАТЬ:

Небольшой пример:

class Example {
   private String name;
   private Integer age;
   private List<String> keywords;
   private List<String> countries;

   public String toString() {
       return new Gson().toJson(this);
   }
}
person Kevin    schedule 22.05.2011
comment
Я понимаю. спасибо за предложение. На самом деле я пытаюсь увидеть, может ли gson преобразовать строку Json в объект Java, используя некоторое отражение. - person easycoder; 22.05.2011
comment
@easycoder: внутренне gson использует отражение для преобразования строки в объекты Java; в этом суть библиотеки. Все, что вам нужно сделать, это смоделировать json как java-объект, и он просто заработает. - person Kevin; 24.05.2011
comment
да. это круто.. и удобно. Я пытался смешать библиотеку JSON.org с gson. - person easycoder; 25.05.2011