我使用的是Gson庫,但是當它序列化JsonArray對象時,它似乎將此序列化爲對象而不是JSON數組。即序列化JsonArray作爲數組,而不是使用Gson的對象
{元素:[{名: 「值1},{名稱:」 值2" }]}?
如何從正在連載中刪除元素
我使用的是Gson庫,但是當它序列化JsonArray對象時,它似乎將此序列化爲對象而不是JSON數組。即序列化JsonArray作爲數組,而不是使用Gson的對象
{元素:[{名: 「值1},{名稱:」 值2" }]}?
如何從正在連載中刪除元素
我去看病,因爲我的腳受傷的時候我就可以走了。醫生說,「不要走就可以了。」
一般來說,像GSON的API時,一個寧可甚至不知道JsonArray
存在,和他們」而是隻使用API的數據綁定部分,因此,而不是手動構建JsonArray
,然後處理序列化它,只需提供一個Java List
或數組到Gson.toJson()
。例如:
List list = new ArrayList();
list.add("one");
list.add(2);
list.add(new Foo());
Gson gson = new Gson();
String json = gson.toJson(list);
System.out.println(json);
如果這方式並不適合您的需求,您正在使用插着JsonArray
出於某種原因,那麼你可能會被誘惑,只是調用其toString()
方法,因爲,它目前創造什麼最終我不會使用它,因爲文檔中沒有任何內容表示toString()
可以保證爲封閉的數組內容創建有效的JSON表示。因此,在未來的Gson版本中,它可能不會返回相同格式的String
。
無論如何,如果你真的想使用JsonArray,它應該按照以下順序足夠好。
JsonElement one = new JsonPrimitive("one");
JsonElement two = new JsonPrimitive(2);
JsonObject foo = new JsonObject();
foo.addProperty("foo", new Foo().foo);
JsonArray jsonArray = new JsonArray();
jsonArray.add(one);
jsonArray.add(two);
jsonArray.add(foo);
System.out.println(new Gson().toJson(jsonArray));
// ["one",2,{"foo":"hi"}]
注意:此答案基於Gson 2.2 API。我不記得Gson的早期版本是否包含超載的toJson(JsonElement)
方法。
如果toJson
方法已被用於這種方式(序列化JsonArray
),但輸出如原始問題所示,請記住Java在重載方法中進行選擇時不考慮運行時類型。它綁定到編譯時類型。 (我知道。)因此,您可能需要將參數類型轉換爲JsonElement
,以便讓編譯器知道綁定的方法。以下說明原始問題中可能發生的情況。
System.out.println(new Gson().toJson((Object)jsonArray));
// {"elements":["one",2,{"foo":"hi"}]}
你直接與JsonArray工作,而不是隻使用數據綁定GSON的API,以自定義輸出,或用於數據綁定不滿足您的需求API的一些其他的缺點? (使用JsonElements比使用簡單的數據綁定API更不常見,這是Gson擅長的地方。) –