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

Bha*_*iya 17 arrays android json iterator arraylist

我想动态地解析我的Json数组.并希望获得jsonarray下每个元素的KEYS数组.我通过迭代器得到这个.但没有按照输出json formate获得序列.

我的JSON Formate:

{
  "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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    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);
Run Code Online (Sandbox Code Playgroud)

我在logcate输出中获得的内容:

 ---- KEYS---- [DateCreated,CustomerName, Customer, ShipmentNumber]
Run Code Online (Sandbox Code Playgroud)

我想要的是 :

 ---- KEYS---- [ShipmentNumber, Customer, DateCreated,CustomerName]
Run Code Online (Sandbox Code Playgroud)

Aru*_*rge 12

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

公共迭代器键()

自:API级别1

返回此对象中String名称的迭代器.返回的迭代器支持remove,这将从该对象中删除相应的映射.如果在返回迭代器后修改此对象,则迭代器的行为是未定义的.键的顺序是未定义的.

所以你可能得到了钥匙,但订单未定义.如果您想要任何特定顺序的密钥,您可以使用任何排序算法.

编辑

由于您不知道从WS获得的KEYS的顺序,在收到数据后,您可以在屏幕上以有序格式显示详细信息.构建之后arraylist KEYS,您可以使用以下内容按字母顺序对其进行排序:

Collections.sort(KEYS);  
Run Code Online (Sandbox Code Playgroud)

这将命令StringsKEYS arraylist根据其自然顺序(这是按字母顺序).


Rob*_*ood 6

我刚才知道当我按下ctlr +空格键时,其中明确写出键的行为是未定义的,订单不是按键维护的.

在此输入图像描述

Arun George正确地说@你必须使用任何排序方法来实现你的目标.

并且对于排序可能是这个链接将帮助您.


Beh*_*nam 6

使用谷歌的GSON库.它有很多设置来读取/创建/解析json数组和json对象.我没有测试它来找到解决方案,但我认为这是非常简单和功能齐全的工具,可以解决问题.