JSONObject to String,API 10和API19中的结果不同

时间:2014-03-05 11:11:05

标签: android

我有以下代码将JSONObject转换为StringEntity,我将通过HTTP post请求发送。这在使用KITKAT的实际设备上运行正常,但是当我使用API​​10在模拟器中尝试时,我从服务器收到错误。

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"
         }
      }
   ]
}

为什么会这样?有更好的方法吗?

感谢。

2 个答案:

答案 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