Gson превратить массив объектов данных в JSON - Android - PullRequest
34 голосов
/ 08 февраля 2012

В настоящее время я работаю над собственным приложением для Android с интерфейсом webView.

У меня есть что-то вроде:

public class dataObject
{
  int a;
  String b;
}

и в действии,

Я сделалмассив dataObject, скажем dataObject x [5];

Теперь я хочу передать эти 5 dataObject моему интерфейсу javascript webView как JSON в функции обратного вызова.

Я просмотрел интернет, похоже, что в большинстве уроков рассказывается, как конвертировать fromJson().Там не так много о toJson().Я нашел тот, который научил меня, что dataObject.toJson(), будет работать.

Но как мне передать все 5 объектов данных?

Ответы [ 2 ]

84 голосов
/ 08 февраля 2012

Вот полный пример того, как использовать Gson со списком объектов. Это должно продемонстрировать точно , как конвертировать в / из Json, как ссылаться на списки и т. Д.

Test.java

import com.google.gson.Gson;
import java.util.List;
import java.util.ArrayList;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;


public class Test {

  public static void main (String[] args) {

    // Initialize a list of type DataObject
    List<DataObject> objList = new ArrayList<DataObject>();
    objList.add(new DataObject(0, "zero"));
    objList.add(new DataObject(1, "one"));
    objList.add(new DataObject(2, "two"));

    // Convert the object to a JSON string
    String json = new Gson().toJson(objList);
    System.out.println(json);

    // Now convert the JSON string back to your java object
    Type type = new TypeToken<List<DataObject>>(){}.getType();
    List<DataObject> inpList = new Gson().fromJson(json, type);
    for (int i=0;i<inpList.size();i++) {
      DataObject x = inpList.get(i);
      System.out.println(x);
    }

  }


  private static class DataObject {
    private int a;
    private String b;

    public DataObject(int a, String b) {
      this.a = a;
      this.b = b;
    }

    public String toString() {
      return "a = " +a+ ", b = " +b;
    }
  }

}

Чтобы скомпилировать это:

javac -cp "gson-2.1.jar:." Test.java

И, наконец, запустить его:

java -cp "gson-2.1.jar:." Test

Обратите внимание, что если вы используете Windows, вам придется переключить : с ; в двух предыдущих командах.

После запуска вы должны увидеть следующий вывод:

[{"a":0,"b":"zero"},{"a":1,"b":"one"},{"a":2,"b":"two"}]
a = 0, b = zero
a = 1, b = one
a = 2, b = two

Имейте в виду, что это всего лишь программа командной строки, чтобы продемонстрировать , как она работает, но в среде Android применяются те же принципы (ссылки на jar-библиотеки и т. Д.)

0 голосов
/ 02 февраля 2015

Моя версия десериализации списка gson с использованием вспомогательного класса:

public List<E> getList(Class<E> type, JSONArray json) throws Exception {
    Gson gsonB = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    return gsonB.fromJson(json.toString(), new JsonListHelper<E>(type));
}



public class JsonListHelper<T> implements ParameterizedType {

  private Class<?> wrapped;

  public JsonListHelper(Class<T> wrapped) {
    this.wrapped = wrapped;
  }

  public Type[] getActualTypeArguments() {
    return new Type[] {wrapped};
  }

  public Type getRawType() {
    return List.class;
  }

  public Type getOwnerType() {
    return null;
  }

}

Использование

List<Object> objects = getList(Object.class, myJsonArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...