使用变量键解析json

9

我刚刚遇到了一个具有挑战性的问题。

下面是一个JSON响应,其中键是变量(GUID)

我该如何解析它?我已经尝试了Google Gson,但没有成功。

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

1
我不确定我完全理解这个问题。根据JSONLint,该JSON是有效的,因此您应该能够将其解析为JSON。 - Alan
但问题在于随机生成的 GUID。 - DroidEngineer
我已经针对它创建了POJO,但它不起作用,因为每次在服务器端生成的GUID都是不同和唯一的。 :) - DroidEngineer
1
你尝试过这个吗:Object.keys(obj) - Alan
只需将JSON解析为映射和数组,然后按传统方式访问即可。您不必为每个对象创建自定义类-大多数其他语言都不需要这样做,在许多情况下,对于简单的JSON结构来说,这是没有意义的额外工作。 - Hot Licks
1个回答

14

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

请注意,Map<String,SomeObject>正是您的JSON所表示的,因为您有一个包含一对string和某个objectobject

{ "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,您可以使用相同的解析代码,但在 Map 中使用一个通用的 Object,即 Map<String, Object>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接