忽略Android中JSON键的大小写

忽略Android中JSON键的大小写,android,json,Android,Json,我在我的android应用程序中使用android操作系统中的本机JSON库。它很好用,但有一件事让我抓狂 如果服务器界面发生变化并给出几乎相同的答案,但键符号会有点不同(例如,examplekeyofmyapp和examplekeyofmyapp),我就有问题了 有没有办法忽略钥匙的情况 或者你们中的任何人在这些案件中使用解决方法 如果您已经像这样实现了代码,那就谢谢您了 jsonobject.get(examplekeyofmyapp) 然后修改代码。只需将json字符串更改为小写 json

我在我的android应用程序中使用android操作系统中的本机JSON库。它很好用,但有一件事让我抓狂

如果服务器界面发生变化并给出几乎相同的答案,但键符号会有点不同(例如,examplekeyofmyappexamplekeyofmyapp),我就有问题了

有没有办法忽略钥匙的情况

或者你们中的任何人在这些案件中使用解决方法


如果您已经像这样实现了代码,那就谢谢您了
jsonobject.get(examplekeyofmyapp)

然后修改代码。只需将json字符串更改为小写


jsonString.toLowerCase()
。就是这样,所有的大写字母都会转换成小写。

我遇到了同样的问题,我找到的最佳解决方案是检查您的密钥是否有可用值

你仍然需要检查所有你认为可能的案例

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。
希望有帮助

我知道这已经有几年了,但我认为我的解决方案可能会帮助其他人:

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);
String keyName=null;
for(迭代器iter=jsonData.keys();iter.hasNext();){
String key=iter.next();
if(key.equalsIgnoreCase(jsonVar)){
keyName=key;
打破
}
}
get(keyName);
显然,您可以将“get()”更改为其他类型的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 "";
    }
}
public静态字符串getJSONString(JSONObject jsonData,String jsonVar){
//以空白名称开始
字符串keyName=null;
//循环浏览这些键以找到正确的拼写
for(迭代器iter=jsonData.keys();iter.hasNext();){
String key=iter.next();
if(key.equalsIgnoreCase(jsonVar)){
keyName=key;
打破
}
}
//如果找不到密钥,则返回null
if(keyName==null){
返回键名;
}
//需要一个try/catch绕过JSON的东西,因为变量可能是错误的类型或不存在
试一试{
返回jsonData.getString(keyName);
}
捕获(例外e){
//记录变量和错误
Log.w(“getJSONString”,“未能getJSONString”+jsonVar+“-”+e.toString());
//返回空字符串,因为“获取”失败
返回“”;
}
}
一旦创建了所有类型,就可以更轻松地处理空白或缺少的值


我希望这对某人有所帮助:)

我也考虑过这个解决方案,但它不是正确的解决方案。因为所有信息都将转换为小写,也就是那些值中的信息。但是如果我不被允许改变他们的信仰呢?!然后唯一的解决方案是检查它,例如KeyOfMyApp,如果该键不存在,则检查exampleKeyOfMyApp。检查更多的组合,如果有的话。我也考虑过。但这会让一切变得太复杂。但是谢谢你的建议你的案子太简单了。想象一下键newTweetsUrl(只是一个例子)。你可以使用NEWTWEETSURL或NEWTWEETSURL,或者如果你有疯狂的服务器实现,比如NEWTWEETSURL。我知道有几种情况需要管理。这就是为什么我对“你认为你可能有的所有可能的案例”进行了精确分析。大多数情况下,都有可识别的大小写(全大写、全小写、第一个大写字母)。我愿意接受更好的解决方案,但暂时找不到