我正在研究一个使用在线API的项目。 到目前为止,一切都很好。 一个API调用将项目添加到发票中,这让我无法自拔。
这是我需要发送的数组:
{id = 84, new_item={price=69.99, title=new item}}
我的发票项目数组没问题:
`JSONObject items = new JSONObject();
JSONObject it = new JSONObject();
try {
items.put("id",id);
it.put("title",item);
it.put("price",price);
items.put("new_item",it);
} catch (JSONException e) {
e.printStackTrace();
}`
现在,这给了我
{"id":"84","new_item":{"title":"ffffvvv","price":"6.99"}}
但是我的功能仍然期望使用哈希表。我认为更改以前对该函数的调用并希望它具有JsonObject是值得的。到目前为止,我还没有花一个多小时。
答案 0 :(得分:0)
我认为我看到了您的问题,如果我误解了,请告诉我。您有一个类型为myArray
的对象HashMap<String, HashMap<String, String>>
。这意味着它是一个将 maps 字符串映射到地图的映射,这些映射又将Strings映射到其他Strings
自然,您的第一个myArray.put()
起作用是因为您将put
类型的对象(value
)HashMap<String, String>
放入myArray
中,并将其标记为{{ 1}}。在您的地图中,您有"new_item"
。
然后,您想在"new_item" -> value
中添加一个新内容,即myArray
。 "id" -> 84
是一个字符串,因此它是放入"id"
的正确密钥类型,但是 value 必须是myArray
类型。 HashMap<String, String>
是84
,即使int
也不起作用,因为它是"84"
,而不是String
如果您想让地图HashMap<String, String>
同时包含myArray
和 "new_item" -> value
,则"id" -> 84
和value
必须是相同类型的。最简单的方法是可能将84
更改为myArray
并将HashMap<String, String>
和value
转换为84
它们放在String
中。如果您要做的是将myArray
用作myArray
(发送请求,打印等),则为true。
答案 1 :(得分:0)
解决方案在我对主要帖子的编辑中。我试图使用HashMap构建参数对象以发送到API。 直到我需要将其混合并将一个对象放到一个对象中但还带有一些简单的字符串值的情况下,这种方法才能正常工作。 Java就是不喜欢这样。 HashMap的想法只是用JsonObject代替了。 我应该从一开始就这样做,但是我只是一个初学者。 由于只有发票和客户视图是我要做的。替换所有现有的函数调用只用了大约30分钟。 AM!做完了 希望这对某人有帮助。当您真正认为找到解决方案时。不要害怕再往前看。确保这是正确的解决方案。