Przykładowa struktura danych Java w oryginalnym pytanie nie pasuje do opisu struktury JSON w komentarzu.
JSON opisano jako
"tablica {obiektu z tablicą {przedmiot}}".
Pod względem typów opisanych w pytaniu JSON języku struktury danych Java, które w zależności od struktury JSON łatwe deserializacji z Gson jest
„tablica {obiektu TypeDTO z tablicą { Obiekt ItemDTO}} ".
Jednak struktura danych Java podana w pytaniu nie jest tym. Zamiast tego jest to "tablica obiektu {TypeDTO z tablicą tablicy {objectDTO object}}".
Tablica dwuwymiarowa! = Tablica jednowymiarowa.
Ten pierwszy przykład demonstruje użycie Gson do prostego deserializacji i serializacji struktury JSON, która jest "tablicą {obiektu z tablicą {obiektu}}".
input.json treści:
[
{
"id":1,
"name":"name1",
"items":
[
{"id":2,"name":"name2","valid":true},
{"id":3,"name":"name3","valid":false},
{"id":4,"name":"name4","valid":true}
]
},
{
"id":5,
"name":"name5",
"items":
[
{"id":6,"name":"name6","valid":true},
{"id":7,"name":"name7","valid":false}
]
},
{
"id":8,
"name":"name8",
"items":
[
{"id":9,"name":"name9","valid":true},
{"id":10,"name":"name10","valid":false},
{"id":11,"name":"name11","valid":false},
{"id":12,"name":"name12","valid":true}
]
}
]
Foo.java:
import java.io.FileReader;
import java.util.ArrayList;
import com.google.gson.Gson;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);
System.out.println(gson.toJson(myTypes));
}
}
class TypeDTO
{
int id;
String name;
ArrayList<ItemDTO> items;
}
class ItemDTO
{
int id;
String name;
Boolean valid;
}
Ten drugi przykład wykorzystuje zamiast struktury JSON, który jest faktycznie „tablica {obiektu TypeDTO z tablica tablicy {obiekt ItemDTO}} ", aby dopasować oryginalną strukturę danych Java.
input.json Zawartość:
[
{
"id":1,
"name":"name1",
"items":
[
[
{"id":2,"name":"name2","valid":true},
{"id":3,"name":"name3","valid":false}
],
[
{"id":4,"name":"name4","valid":true}
]
]
},
{
"id":5,
"name":"name5",
"items":
[
[
{"id":6,"name":"name6","valid":true}
],
[
{"id":7,"name":"name7","valid":false}
]
]
},
{
"id":8,
"name":"name8",
"items":
[
[
{"id":9,"name":"name9","valid":true},
{"id":10,"name":"name10","valid":false}
],
[
{"id":11,"name":"name11","valid":false},
{"id":12,"name":"name12","valid":true}
]
]
}
]
Foo.java:
import java.io.FileReader;
import java.util.ArrayList;
import com.google.gson.Gson;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);
System.out.println(gson.toJson(myTypes));
}
}
class TypeDTO
{
int id;
String name;
ArrayList<ItemDTO> items[];
}
class ItemDTO
{
int id;
String name;
Boolean valid;
}
Odnośnie pozostałych dwóch pytań:
jest Gson bardzo szybko?
Nie porównuje się z innymi interfejsami API do deserializacji/serializacji. Gson tradycyjnie był amongst z slowest. Obecne i następne wydania Gsona zawierają znaczące ulepszenia wydajności, ale nie szukałem najnowszych danych testowych wydajności, aby potwierdzić te twierdzenia.
To powiedziawszy, jeśli Gson jest wystarczająco szybki dla twoich potrzeb, to ponieważ sprawia, że deserializacja JSON jest tak łatwa, prawdopodobnie ma to sens. Jeśli wymagana jest lepsza wydajność, Jackson może być lepszym wyborem. Oferuje wiele (może nawet wszystkie) udogodnień Gson.
Czy lepiej trzymać się tego, co już pracuję?
Nie zrobiłbym tego. Jak najbardziej zawsze raczej mieć jedną prostą linię kodu podobnego
TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);
... łatwo deserializowania w złożonej strukturze danych, niż trzydziestu linii kodu, które byłyby potrzebne do mapowania części razem w jednym składniku czas.
Musisz podać więcej informacji. Jaki jest format odbieranego JSON? Dlaczego masz tablicę 'ArrayList' w swoim' TypeDTO'? Gson radzi sobie z takimi rzeczami. – ColinD
Myślałem, że dałem jasny obraz JSON. Najwyższy poziom to lista obiektów. Każdy obiekt ma wiele par kv, z których jedna to inna lista obiektów z większą liczbą par kv. – DavieDave
Ktoś ma sugestię? – DavieDave