swift解析json按维持秩序

时间:2017-12-03 05:33:47

标签: ios json swift

假设我有一个json字符串,其中有一个名为data的json数组。 该数组包含用户配置文件数据的json对象,例如名称,年龄,性别等。

现在想按顺序解析那个json对象,例如,如果对象是

{
    "name": "sample name",
    "age": "30",
    "gender": "male"

}

我想按照name,age,gender的顺序解析列表但是使用ios,当我将json对象转换为字典时,顺序被更改,我知道字典没有被排序,所以实现这个的替代方法是什么?

它是第三方api所以我没有任何动手,我们已经在android中使用链接哈希映射完成了它,但是真的陷入了swift,我想要做的最后一件事是用正则表达式解析。

以下列方式解析json:

var rootData = try JSONSerialization.jsonObject(with: data!) as! [String:Any]
  if let val = fromList["data"] {

let dataNode = val as! [[String:Any]]

for row in dataNode {


 for (key,keyVal) in row {
//here the key is not in order.because when we cast it as dictionary the order gets changed.


   }

}

对于Android,我们已经通过以下功能实现了这一目标:

public ArrayList<LinkedHashMap<String, Object>> parseJsonArrayList(String odata, String arrayName) {
ArrayList<LinkedHashMap<String, Object>> mylist = new ArrayList<>();

try {
JSONObject e = new JSONObject(odata);
JSONArray data = e.getJSONArray(arrayName);

for(int i = 0; i < data.length(); ++i) {
JSONObject v = data.getJSONObject(i);
LinkedHashMap<String, Object> map = new LinkedHashMap<>(100, 0.75f, false);
Iterator keys = v.keys();

while(keys.hasNext()) {
String key = String.valueOf(keys.next());
//gph.log("debug4", key);
map.put(key, v.getString(key));
//gph.log("debug4", v.getString(key));
}

mylist.add(map);
}
} catch (JSONException var10) {
var10.printStackTrace();
}

return mylist;
}  

2 个答案:

答案 0 :(得分:1)

不要尝试订购字典。而是按照您想要的顺序创建一个键数组:

let keys = [“name”, “age”, “gender”]

然后用它们访问字典:

for key in keys {
    let value = dict[key]
    // Present the value.
}

这将确保您期望的订单。

答案 1 :(得分:0)

正如您所提到的,您无法在Dictionary中获取有序数据。如果可能,您可以在JSON中添加“order”键,如

[
  {
    "name": "sample name",
    "order": 1
  },
  {
    "age": "30",
    "order": 1
  },
  {
    "gender": "",
    "male": "",
    "order": 1
  }
]

因此,您可以根据订单键进行排序。