9

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"
  }
}
MikO
  • 17,468
  • 11
  • 72
  • 107
DroidEngineer
  • 447
  • 2
  • 9
  • 20
  • 1
    Not sure I fully understand the question. That JSON is valid according to JSONLint, so you should be able to parse it as JSON. – Alan Jun 03 '13 at 06:44
  • agreed. But problem is randonly generated GUID. – DroidEngineer Jun 03 '13 at 06:45
  • I've create pojo against it but its doesn't work because each time GUID generated on server side is different and unique.:) – DroidEngineer Jun 03 '13 at 06:46
  • 1
    Have you tried: `Object.keys(obj)` – Alan Jun 03 '13 at 06:47
  • Just parse the JSON into maps and arrays and access the stuff the old-fashioned way. You don't *have* to create custom classes for everything -- most other languages don't do that, and it's meaningless extra work for a simple JSON structure in many cases. – Hot Licks Jun 03 '13 at 11:10

2 Answers2

13

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>.

MikO
  • 17,468
  • 11
  • 72
  • 107
0

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.

aisbaa
  • 8,774
  • 5
  • 31
  • 43