在原來的問題不會在評論中JSON結構的描述不符的例子Java數據結構。
的JSON被描述爲
「的陣列{物體的陣列{對象}}」。
在的問題中描述的類型而言,JSON翻譯成Java數據結構,其將匹配,便於反序列化與GSON的JSON結構是
「{TypeDTO對象的陣列與陣列{ ItemDTO對象}}「。
但問題中提供的Java數據結構不是這樣的。相反,它是
「{TypeDTO對象的數組,其中{ItemDTO對象的數組} {}的數組}。
一個二維數組!!=一維數組。
這個第一個例子演示瞭如何使用Gson簡單地反序列化和序列化一個JSON結構,該結構是「{object {array} {object}}}」的數組。
input.json內容:
[
{
"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;
}
該第二示例使用代替的JSON結構,它實際上是「{TypeDTO物體的陣列一個{ItemDTO對象}}數組的數組「來匹配最初提供的Java數據結構。
input.json內容:
[
{
"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;
}
至於其餘兩個問題:
是GSON非常快?
未與其他反序列化/序列化API進行比較。 Gson傳統上是amongstslowest。據報道,目前和未來的Gson版本包括顯着的性能改進,儘管我沒有尋找最新的性能測試數據來支持這些聲明。這就是說,如果Gson足夠快滿足您的需求,那麼因爲它使得JSON反序列化變得如此簡單,所以使用它可能是有意義的。如果需要更好的性能,那麼Jackson可能是更好的選擇。它提供了許多(甚至可能全部)Gson的便利。
還是我最好堅持我已經工作了?
我不會。我想大多數的人總是有點有像
TypeDTO[] myTypes = gson.fromJson(new FileReader("input.json"), TypeDTO[].class);
的代碼一個簡單的線條......很容易反序列化到一個複雜的數據結構,比那三十行代碼,否則將需要的作品一起在一個組件映射一次。
您需要提供更多信息。你收到的JSON格式是什麼?爲什麼你的'TypeDTO'中有一個'ArrayList'數組? Gson處理這種事情很好。 – ColinD 2010-09-21 20:13:44
我以爲我給了JSON的清晰圖片。頂級是對象列表。每個對象都有多個kv對,其中一個是具有更多kv對的另一個對象列表。 – DavieDave 2010-09-23 02:49:37
任何人都有建議? – DavieDave 2010-10-13 12:06:10