Игнорировать случай для JSON-ключей в Android - PullRequest
0 голосов
/ 16 марта 2011

Я использую в своем Android-приложении нативную JSON-библиотеку в ОС Android. Это прекрасно работает, но одна вещь сводит меня с ума.

Если интерфейс сервера изменяется и дает почти тот же ответ, но обозначения клавиш будут немного другими (например, examplekeyofmyapp и exampleKeyOfMyApp ), у меня проблема.

Есть ли способ игнорировать регистр ключей?

Или, может быть, кто-нибудь из вас использует обходной путь для этих случаев?

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 июля 2012

Я столкнулся с той же проблемой, и лучшее решение, которое я нашел, это проверить, есть ли у вашего ключа доступное значение.

Вам все еще нужно проверить все возможные случаи, которые, по вашему мнению, могли бы быть.

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 голосов
/ 22 мая 2014

Я знаю, что это несколько лет, но я думал, что мое решение может помочь другим:

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

Очевидно, вы можете изменить "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 "";
    }
}

После того, как вы создали все типы, вам будет проще обрабатывать пустые или отсутствующие значения

Надеюсь, это кому-нибудь поможет:)

0 голосов
/ 16 марта 2011

если вы реализовали свой код следующим образом
jsonobject.get(examplekeyofmyapp);
, измените код.просто измените строку json на нижний регистр.

jsonString.toLowerCase().и все верхний регистр будет преобразован в нижний регистр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...