Parse json with variable key

2019-02-14 03:51发布

I just came up with challenging problem.

Below is json response where key is variable (a GUID)

How can I parse it? I've tried Google Gson, but that didn't work.

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

2条回答
叼着烟拽天下
2楼-- · 2019-02-14 04:46

My guess is that you're looking for a way to get GUID. You could try Object.keys function.

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

It worked on firefox 21.0, but I cant guaranty that it'll work on every browser.

查看更多
手持菜刀,她持情操
3楼-- · 2019-02-14 04:47

If you use Gson, in order to parse your response you can create a custom class representing your JSON data, and then you can use a Map.

Note that a Map<String, SomeObject> is exactly what your JSON represents, since you have an object, containing a pair of string and some object:

{ "someString": {...} }

So, first your class containing the JSON data (in pseudo-code):

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

Then parse your JSON response using a Map, like this:

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

Now you can access all the values using your Map, for example:

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

Note: if you only want to get the GUID value, you don't need to create a class YourClass, and you can use the same parsing code, but using a generic Object in the Map, i.e., Map<String, Object>.

查看更多
登录 后发表回答