Как стать автором
Обновить

Gson шпаргалка для Map, List и Array

Время на прочтение3 мин
Количество просмотров60K
Постоянно сталкиваясь с парсингом Json всегда подглядываю в старых проектах или на встретившуюся реализацию объекта на stackoverflow.com.

Решил собрать три основных типа в шпаргалку Map, List, Array.

Type itemsMapType = new TypeToken<Map<Integer, GoodsItem>>() {}.getType();
Type itemsListType = new TypeToken<List<GoodsItem>>() {}.getType();
Type itemsArrType = new TypeToken<GoodsItem[]>() {}.getType();


Рассматривается Serialization/Deserialization операции класса:

public class GoodsItem{
    String name;
    float price;
    public GoodsItem(String name, float price) {
    this.name = name;
    this.price = price;

    public String toString(){
	return name + " : " + price;
    }
}



Serialization/Deserialization выполнен с использованием библиотеки Gson. В качестве «испытуемого» рассматривается класс GoodsItem.

HashMap

Map<Integer, GoodsItem> mapItems = new HashMap<Integer, GoodsItem>();
mapItems.put(1, new GoodsItem("Samsung", 51200.6f));
mapItems.put(2, new GoodsItem("Lg", 5400.6f));
mapItems.put(3, new GoodsItem("Alcatel", 4500.6f));

String jsonStr = new Gson().toJson(mapItems);
System.out.println(jsonStr);

Результат Serialization:

{
"1":{"name":"Samsung","price":51200.6},
"2":{"name":"Lg","price":5400.6},
"3":{"name":"Alcatel","price":4500.6}
}

Map<Integer, GoodsItem> mapItemsDes = new Gson().fromJson(jsonStr, itemsMapType);
System.out.println(mapItemsDes.toString());

Результат Deserialization:

{1=Samsung : 51200.6, 2=Lg : 5400.6, 3=Alcatel : 4500.6}


ArrayList

List<GoodsItem> listItems = new ArrayList<GoodsItem>();
listItems.add( new GoodsItem("Samsung" , 51200.6f));
listItems.add( new GoodsItem("Lg" , 5400.6f));
listItems.add( new GoodsItem("Alcatel" , 4500.6f));

String jsonStr = new Gson().toJson(listItems);
System.out.println(jsonStr);

Результат Serialization:

[
{"name":"Samsung","price":51200.6},
{"name":"Lg","price":5400.6},
{"name":"Alcatel","price":4500.6}
]

List<GoodsItem> listItemsDes = new Gson().fromJson(jsonStr,itemsListType);
System.out.println(listItemsDes.toString());

Результат Deserialization:

[Samsung : 51200.6, Lg : 5400.6, Alcatel : 4500.6]


Array

GoodsItem[] arrItems = new GoodsItem[3];
arrItems[0] = new GoodsItem("Samsung", 51200.6f);
arrItems[1] = new GoodsItem("Lg", 5400.6f);
arrItems[2] = new GoodsItem("Alcatel", 4500.6f);

String jsonStr = new Gson().toJson(arrItems);
System.out.println(jsonStr);

Результат Serialization:

[
{"name":"Samsung","price":51200.6},
{"name":"Lg","price":5400.6},
{"name":"Alcatel","price":4500.6}
]

GoodsItem[] arrItemsDes = new Gson().fromJson(jsonStr, itemsArrType);
System.out.println(Arrays.toString(arrItemsDes));

Результат Deserialization:

[Samsung : 51200.6, Lg : 5400.6, Alcatel : 4500.6]


Как видно ArrayList и простой массив объектов преобразуются в одинаковую строку Json.

Полезные инструменты:
parcelabler.com дает возможность по типу класса сгенерировать parcelable методы для Android. Например для класса GoodsItem:

public class GoodsItem implements Parcelable
public class GoodsItem implements Parcelable {
    String name;
    float price;
    public GoodsItem(String name, float price) {
    this.name = name;
    this.price = price;

    public String toString(){
    return name + " : " + price;
    }

    protected GoodsItem(Parcel in) {
        name = in.readString();
        price = in.readFloat();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeFloat(price);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<GoodsItem> CREATOR = new Parcelable.Creator<GoodsItem>() {
        @Override
        public GoodsItem createFromParcel(Parcel in) {
            return new GoodsItem(in);
        }

        @Override
        public GoodsItem[] newArray(int size) {
            return new GoodsItem[size];
        }
    };
}



jsonschema2pojo.org — Generate Plain Old Java Objects from JSON or JSON-Schema.

Было бы интересно узнать, чем пользуетесь вы в своих проектах.
Теги:
Хабы:
+2
Комментарии8

Публикации

Истории

Работа

Java разработчик
358 вакансий

Ближайшие события