我對此有疑問,但在 Stack Overflow 上閱讀了其他問題并最初解決了這些問題?,F在我可以在我的客戶端和服務器之間發送 JSON 并在客戶端中從這個 JSON 創建對象。但是,我不斷收到一個特定對象的此錯誤:client.restaurant = gson.fromJson(obj.get("restaurant"), Restaurant.class); // worksclient.postcodes = gson.fromJson(obj.get("postcodes"), new TypeToken<ArrayList<Postcode>>(){}.getType()); // worksclient.orders = gson.fromJson(obj.get("orders"), new TypeToken<ArrayList<Order>>(){}.getType()); // java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at path $[0].dishes.updateListeners所有 JSON 根據https://jsonlint.com都是有效的。我不知道如何找到有關此問題的更多信息,但我嘗試的一件事是我提取了 JSONArrayList<Order> orders并嘗試手動解析它:JsonObject testOrder = parser.parse("{\n" + " \"orders\": [\n" + " {\n" + " \"user\": {\n" + " \"userName\": \"Admin\",\n" + " \"password\": \"password\",\n" + " \"address\": \"University Road\",\n" + " \"postcode\": {\n" + " \"postcodeName\": \"SO17 1BJ\",\n" + " \"latLong\": {\n" + " \"lon\": 0.0,\n" + " \"lat\": 0.0\n" + " },\n" + " \"distance\": 0,\n" + " \"updateListeners\": []\n" + " },\n" + " \"updateListeners\": []\n" + " },\n" + " \"dishes\": {\n" + client.orders = gson.fromJson(testOrder, new TypeToken<ArrayList<Order>>(){}.getType()));但這也不起作用(錯誤略有不同-- Expected BEGIN_ARRAY but was BEGIN_OBJECT)。
1 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
所以我認為你的問題是圍繞這個:
"dishes": {
"Sushi Roll": 5,
"Side Rice": 2
}
它嘗試調用 Order 的方法addDishes(Dish dish, Number quantity)但失敗了,因為它有"Sushi Roll"而不是代表Dish. 您需要更新 Json 而不是字符串以具有匹配的構造函數的對象Dish。就像是:
"dishes": {
{"name":"Sushi Roll","description":"", "price":0.0, "restockThreshold": 0, "restockAmount":0}: 5,
{"name":"Side Rice","description":"", "price":0.0, "restockThreshold": 0, "restockAmount":0}: 2
}
一般來說,在處理 Json 時,您需要遵循一些規則。
始終將不帶參數的默認構造函數放入數據對象。
嘗試使用 getter 和 setter 保留所有集合。
添加回答
舉報
0/150
提交
取消