亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解析器適用于某些 ArrayList,拋出 Expected BEGIN_OBJECT

解析器適用于某些 ArrayList,拋出 Expected BEGIN_OBJECT

撒科打諢 2022-11-10 15:16:41
我對此有疑問,但在 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 保留所有集合。


查看完整回答
反對 回復 2022-11-10
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號