我想出了具有挑战性的问题。
下面是json响应,其中key是可变的(GUID)
我该如何解析它?我已经尝试了Google Gson,但这没效果。
{
"87329751-7493-7329-uh83-739823748596": {
"type": "work",
"status": "online",
"icon": "landline",
"number": 102,
"display_number": "+999999999"
}
}
答案 0 :(得分:12)
如果您使用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
然后使用Map
解析您的JSON响应,如下所示:
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>
。
答案 1 :(得分: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,但我不能保证它可以在每个浏览器上运行。