2011-03-16 61 views
0

我在Android操作系统中的Android应用本机JSON-Library中使用。它工作正常,但有一件事让我发疯。忽略Android中JSON-Keys的情况

如果服务器界面的变化,并给出几乎相同的答案,但关键符号会有点不同(例如examplekeyofmyappexampleKeyOfMyApp)我有一个问题。

有没有办法忽略键的情况?

或者也许您的任何人对这些情况使用了解决方法?

谢谢

回答

0

,如果你已经实施了代码这样
jsonobject.get(examplekeyofmyapp);
然后修改你的代码。只需将json字符串更改为小写。

jsonString.toLowerCase()。多数民众赞成它,所有大写将转换为小写。

+0

我也想过这个解决方案,但它不是正确对象,真爱。因为所有的信息都将被转换为小写字母,也包括那些在价值中的信息。但是如果我不被允许转换它们呢?! – Tima 2011-03-16 10:02:54

+0

然后唯一的解决方案是缺少它forexamplekeyofmyapp,如果这个关键不存在然后检查exampleKeyOfMyApp。如果可用,请检查更多组合。 – 2011-03-16 10:39:47

+0

我还想过这件事。但它会使一切都变得复杂。但是,谢谢你的建议 – Tima 2011-03-16 11:39:51

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。 希望它可以帮助

+0

你的情况太简单了。试想一下关键的newTweetsUrl(只是一个例子)。你可以有NEWTWEETSURL或newtweetsUrl,或者你有像nEwtWEEtsUrL这样疯狂的服务器实现。 – Tima 2012-07-04 12:35:35

+0

我知道有几种情况需要管理。这就是为什么我精简了“你认为你可能有的所有可能的情况”。大多数情况下,都有识别的案例(全大写,全小写,第一个大写字母)。我打开更好的解决方案,但暂时找不到它 – Seynorth 2012-08-08 13:53:07

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); 

很明显,你可以改变“获得()”到其他类型的获得方法

我有用于处理错误的每种类型的核心方法,例如

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

一旦你把所有做出的类型,它可以更容易处理空白或遗漏值

我希望这可以帮助别人:)