我在Android OS中的Android应用程序原生JSON-Library中使用。它工作正常,但有一件事让我发疯。
如果服务器界面发生变化并给出几乎相同的答案,但密钥表示法会有所不同(例如 examplekeyofmyapp 和 exampleKeyOfMyApp ),则会出现问题。
有没有办法忽略钥匙的情况?
或许你们中的任何人都可以针对这些案例使用解决方法?
谢谢
答案 0 :(得分:0)
如果你已经实现了这样的代码
jsonobject.get(examplekeyofmyapp)
;
然后修改你的代码。只需将json String更改为小写。
jsonString.toLowerCase()
。就是这样,所有大写都将转换为小写。
答案 1 :(得分:0)
我遇到了同样的问题,我找到的最佳解决方案是检查您的密钥是否具有可用值。
您仍然需要检查您认为可能存在的所有案例。
String TAG_URL_LOWER_CASE = "url";
String TAG_URL_UPPER_CASE = "URL";
String urlValue = "";
if (!obj.isNull(TAG_URL_LOWER_CASE)) {
urlValue = obj.getString(TAG_URL_LOWER_CASE);
} else if (!obj.isNull(TAG_URL_UPPER_CASE)) {
urlValue = obj.getString(TAG_URL_UPPER_CASE);
}
如果您的密钥没有与您的密钥关联的值,您还将避免JsonException。 希望它有所帮助
答案 2 :(得分:0)
我知道这已经有几年了,但我认为我的解决方案可能有助于其他人:
String keyName = null;
for(Iterator<String> iter = jsonData.keys(); iter.hasNext();) {
String key = iter.next();
if (key.equalsIgnoreCase(jsonVar)) {
keyName = key;
break;
}
}
jsonData.get(keyName);
显然你可以改变&#34; get()&#34;到其他类型的get方法
我有用于处理错误的每种类型的核心方法,例如
public static String getJSONString(JSONObject jsonData, String jsonVar) {
// start with a blank name
String keyName = null;
// loop through they keys to find the correct spelling
for(Iterator<String> iter = jsonData.keys(); iter.hasNext();) {
String key = iter.next();
if (key.equalsIgnoreCase(jsonVar)) {
keyName = key;
break;
}
}
// if the key isn't found, return a null
if (keyName == null) {
return keyName;
}
// need a try/catch around JSON stuff as the variable could be the wrong type or not exist
try {
return jsonData.getString(keyName);
}
catch (Exception e) {
// log the variable & the error
Log.w("getJSONString", "failed to getJSONstring "+jsonVar+" - "+e.toString());
// return an empty string because the "get" failed
return "";
}
}
完成所有类型后,可以更轻松地处理空白或缺失值
我希望这有助于某人:)