2013-06-03 4 views
4

Я просто придумал сложную проблему.Parse json с переменным ключом

Ниже JSON ответ, где ключ является переменной (а GUID)

Как я могу разобрать его? Я пробовал Google Gson, но это не сработало.

{ 
    "87329751-7493-7329-uh83-739823748596": { 
    "type": "work", 
    "status": "online", 
    "icon": "landline", 
    "number": 102, 
    "display_number": "+999999999" 
    } 
} 
+1

Не уверен, что я полностью понимаю вопрос. Этот JSON действителен в соответствии с JSONLint, поэтому вы должны анализировать его как JSON. – Alan

+0

согласился. Но проблема заключается в том, что RIDONLY генерируется GUID. – DroidEngineer

+0

Я создаю pojo против него, но его не работает, потому что каждый раз, когда GUID, сгенерированный на стороне сервера, отличается и уникален. :) – DroidEngineer

ответ

8

Если вы используете Gson, для анализа вашего ответа вы можете создать пользовательский класс, представляющий ваши данные JSON, а затем вы можете использовать Map.

Обратите внимание, что Map<String, SomeObject> это именно то, что представляет собой ваш JSON, так как у вас есть object, содержащее пару string и некоторые object:

{ "someString": {...} } 

Итак, первый ваш класс, содержащий данные в формате JSON (в псевдо -кода):

class YourClass 
    String type 
    String status 
    String icon 
    int number 
    String display_number 

Затем разобрать ваш ответ JSON с помощью Map, например:

Gson gson = new Gson(); 
Type type = new TypeToken<Map<String, YourClass>>() {}.getType(); 
Map<String, YourClass> map = gson.fromJson(jsonString, type); 

Теперь вы можете получить доступ все значения, используя ваш Map, например:

String GUID = map.keySet().get(0); 
String type = map.get(GUID).getType(); 

Примечание: если вы хотите, чтобы получить значение GUID, вам не нужно, чтобы создать класс YourClass, и вы можете использовать один и тот же код синтаксического анализа, но с использованием общего Object в Map, то есть Map<String, Object>.

0

Я предполагаю, что вы ищете способ получить GUID. Вы можете попробовать функцию Object.keys.

json_string = '{"87329751-7493-7329-uh83-739823748596":{"type":"work","status":"online","icon":"landline","number":102,"display_number":"+999999999"}}'; 
object = JSON.parse(js); 
key = Object.keys(object)[0]; 
alert(key); 

Он работал на firefox 21.0, но я не могу гарантировать, что он будет работать в каждом браузере.

+0

дорогой, я делаю это в java. – DroidEngineer

+1

глупо меня, извините, wink.gif – aisbaa

+0

спасибо за ваш вклад в любом случае. :) – DroidEngineer

Смежные вопросы