8

我刚刚提出了具有挑战性的问题。

下面是 json 响应,其中键是可变的(GUID)

我该如何解析它?我试过谷歌 Gson,但没用。

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

2 回答 2

13

如果您使用 Gson,为了解析您的响应,您可以创建一个自定义类来表示您的 JSON 数据,然后您可以使用Map.

请注意, aMap<String, SomeObject>正是您的 JSON 所代表的,因为您有一个object,包含一对string和 some 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,可以使用相同的解析代码,但在 中使用泛型ObjectMapMap<String, Object>.

于 2013-06-03T10:56:33.783 回答
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,但我不能保证它适用于所有浏览器。

于 2013-06-03T06:50:03.097 回答