获取jsonarray下每个元素的KEYS数组

我想dynamic地parsing我的Json数组。 并希望获得在jsonarray下的每个元素的数组。 我通过迭代器得到这个。 但没有得到每个输出json合成的遗漏。

我的JSON甲酸盐:

{ "result": "Success", "AlertDetails": [ { "ShipmentNumber": "SHP34", "Customer": "BEST", "DateCreated": "2012-08-29T04:59:18Z" "CustomerName": "BEST" }, { "ShipmentNumber": "SHP22", "Customer": "BEST", "DateCreated": "2012-08-29T05:34:18Z" "CustomerName": "Jelly" } ] } 

这是我的代码:

  JSONArray array = jsonobject.getJSONArray("AlertDetails"); JSONObject keyarray = array.getJSONObject(0); Iterator temp = keyarray.keys(); while (temp.hasNext()) { String curentkey = (String) temp.next(); KEYS.add(curentkey); } Log.d("Parsing Json class", " ---- KEYS---- " + KEYS); 

我在logcate输出中得到什么:

  ---- KEYS---- [DateCreated,CustomerName, Customer, ShipmentNumber] 

我想要的是 :

  ---- KEYS---- [ShipmentNumber, Customer, DateCreated,CustomerName] 

Solutions Collecting From Web of "获取jsonarray下每个元素的KEYS数组"

JSONObject文档(链接: http : //developer.android.com/reference/org/json/JSONObject.html )对keys()函数有以下描述:

公共Iterator键()

因为:API级别1

返回此对象中的string名称的迭代器。 返回的迭代器支持remove,这将从该对象中移除相应的映射。 如果在迭代器返回之后修改这个对象,那么迭代器的行为是不确定的。 密钥的顺序是未定义的

所以你可能会得到钥匙,但订单是不确定的。 如果您想要按任何特定顺序的密钥,您可以使用任何sortingalgorithm。

编辑

由于您不知道从WS获得的KEYS的顺序,在收到数据后,您可以按照有序的格式在屏幕上显示细节。 在build立arraylist之后,你可以使用下面的字母顺序sorting:

 Collections.sort(KEYS); 

这将根据其自然顺序按字母顺序 )对KEYS arraylistStrings进行sorting

我只是来了解,当我按ctlr +空格键 ,其中清楚地写了, 键的行为是未定义的,订单不是由维护

在这里输入图像说明

Arun George正确地说,你必须使用任何sorting方法来实现你的目标。

并进行sorting可能是这个链接将帮助你。

从谷歌使用GSON库。 它有很多设置来读/创build/parsingjson数组和json对象。 我没有testing它find解决scheme,但我认为这是非常简单和function齐全的工具,可以解决问题。

使用不同的库来dynamic地parsingjson。

下面我写了一段基于Jackson JSON处理器的代码,这是我认为最好的JSON库

 public void test() throws IOException { String str = "{\n" + " \"result\": \"Success\",\n" + " \"AlertDetails\": [\n" + " {\n" + " \"ShipmentNumber\": \"SHP34\",\n" + " \"Customer\": \"BEST\",\n" + " \"DateCreated\": \"2012-08-29T04:59:18Z\",\n" + " \"CustomerName\": \"BEST\"\n" + " }\n" + " ]\n" + "}"; JsonFactory factory = new JsonFactory(); JsonParser jsonParser = factory.createJsonParser(str); JsonToken jsonToken; SerializedString alertDetails = new SerializedString("AlertDetails"); while (!jsonParser.nextFieldName(alertDetails)) { /* move to AlertDetails field */ } jsonParser.nextToken(); // skip [ start array jsonParser.nextToken(); // skip { start object // until } end object while ((jsonToken = jsonParser.nextToken()) != JsonToken.END_OBJECT) { if (jsonToken == JsonToken.FIELD_NAME) { System.out.println(jsonParser.getCurrentName()); } } } 

它只是按照json中相同的顺序打印出字段名称:

 ShipmentNumber Customer DateCreated CustomerName 

编辑

当然,你也可以使用其他的库,比如gson等。但是请记住,正如json.org上所写 :

一个对象是一组无名的名称/值对。

密钥的顺序取决于实现,并可能在每个请求中有所不同。

还有方法名();

返回包含此对象中的string名称的数组。

编辑:以未定义的顺序返回名称。 build议:请自行parsing