我有以下代码将JSONObject转换为StringEntity,我将通过HTTP post请求发送。这在使用KITKAT的实际设备上运行正常,但是当我使用API10在模拟器中尝试时,我从服务器收到错误。
JSONObject jsonRequest = new JSONObject();
//filling the jsonRequest with data
System.out.println(jsonRequest.toString());
StringEntity se = new StringEntity(jsonRequest.toString());
我已经意识到JSONObject#toString的工作方式在API10和API19中有所不同,这就是服务器返回500错误的原因。这就是println输出的内容:
API19
{"expenses":[{"category":"660","attachment":{"data":"\/9j\/4...
API10
{"expenses":[{"category":"660","attachment":"{data=\/9j\/4...
注意等号(=)而不是冒号(:)和引号的不同位置(")。
json应该看起来像
{
"expenses":[
{
"category":"123",
"attachment":{
"data":"akcsdc...sdc"
}
}
]
}
为什么会这样?有更好的方法吗?
感谢。
答案 0 :(得分:1)
最后我发现了问题所在,我将附件对象映射为HashMap,我将其更改为JSONObject,现在它可以正常工作。
JSONObject jsonObj = new JSONObject();
Map<String, Object> attachmentMap = new HashMap<String, Object>();
attahmentMap.put("data", dataString);
jsonObj.put("attachment", attachmentMap);
已更改为
JSONObject jsonObj = new JSONObject();
JSONObject attachmentJson = new JSONObject();
attachmentJson.put("data", dataString);
jsonObj.put("attachment", attachmentJson);
答案 1 :(得分:0)
是的,当你从HashMap转换它时会出错。我使用了org.json.simple.JSONObject