我遇到了一个问题,我尝试将序列化的json字符串解析为JSONObject,以便稍后检索另一个对象PetFedInfo的键值。 我从我的安卓应用程序调用到 ASP.NET Web API,字符串成功返回。
以下是我从 asp.net api服务器解析结果的代码:
JSONObject jsonObj = new JSONObject();
try {
String stringFromServer = PostHTTP(Constants.POST_PET_GETFEDINFO,jObj);
Log.v("stringFromServer",stringFromServer);
Log.v("directCallResult",PostHTTP(Constants.POST_PET_GETFEDINFO,jObj));
Log.v("actualString","{"petName":"nn","lastFedTime":""}");
jsonObj = new JSONObject("{"petName":"nn","lastFedTime":""}");
Log.v("jsonObjFromManualString",jsonObj.toString());
jsonObj = new JSONObject(PostHTTP(Constants.POST_PET_GETFEDINFO,jObj));
Log.v("jsonObjFromDirectCall",jsonObj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
在调试模式下运行应用程序后,当我尝试创建 JSONObject 时,来自实例"stringFromServer"(记录为"stringFromServer")的字符串会引发错误:
org.json.JSONException: Value {"petName":"mm","lastFedTime":""} of type java.lang.String cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:112)
W/System.err: at org.json.JSONObject.<init>(JSONObject.java:168)
at org.json.JSONObject.<init>(JSONObject.java:181)
at com.FeedMyPet.helper.WebRequestManager$2.run(WebRequestManager.java:102)
而我手动输入的字符串(记录为"实际字符串")成功创建了 JSON 对象。 我已经使用 Log.v 将所有字符串值打印到控制台,它们几乎具有相同的输出
V/stringFromServer: "{"petName":"v","lastFedTime":""}"
V/directCallResult: "{"petName":"v","lastFedTime":""}"
V/actualString: {"petName":"nn","lastFedTime":""}
我已经审查了 JSONObject 的构造,它接受一个字符串:
public JSONObject(String json) throws JSONException {
this(new JSONTokener(json));
}
我有点迷茫,为什么使用引号(没有对象?)的序列化对象成功创建了对象,而 String 实例不能。 如何让字符串对象与"实际字符串"的结果匹配?
有人可以指出我正确的方向吗?
尝试清理从服务器接收的字符串。可能会添加一些隐藏字符。
看看这个链接 https://stackoverflow.com/a/15469907/578855
您也可以尝试将双引号替换为此
json=json.replace("\"","'");