java - 尝试使用 Java (Android Studio) 从 String 创建 JSONObject
问题描述
我遇到了一个问题,我尝试将序列化的 json 字符串解析为 JSONObject,以便稍后检索另一个对象 PetFedInfo 的键值。我从我的 android 应用程序调用 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)
而我手动输入的字符串(记录为“actualString”)成功地创建了 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 实例不能成功创建对象,我有点迷茫。如何让 String 对象与“actualString”的结果相匹配?
有人可以指出我正确的方向吗?
解决方案
尝试清理从服务器接收到的字符串。可能会添加一些隐藏字符。
看看这个链接https://stackoverflow.com/a/15469907/578855
您也可以尝试用这个替换双引号
json=json.replace("\\\"","'");
推荐阅读
- css - Angular 11 将边框应用于组件
- forms - 表单中的复选框仅返回 1(最后选择)值
- sql - 简单 gSheet 查询根据未在查询中评估的列中的数据为 Count 函数返回错误值
- python - PyTorch 使用乘法减少列
- r - 使用 dplyr 使用两列之间的公共值进行过滤
- r - 是否有用于将原始输入转换为 .xlsx 文件的 R 函数?
- c++ - 使用 AVX2 将可变长度整数的 varint64 流解压缩为 __m256i 的 qword 元素
- rust - 为什么 Rust 中的 trait 要求任何方法都没有任何类型参数才能保证对象安全?
- python - 使用json在python中合并两个api的数据
- google-cloud-platform - Google PubSub 减少通过推送传递消息的尝试