假設我有一個json字符串,其中有一個名爲data的json數組。 陣列保持例如姓名,年齡,性別等用戶簡檔數據的JSON對象按維護順序快速解析json
現在要解析JSON對象按順序,例如,如果該對象是
{
"name": "sample name",
"age": "30",
"gender": "male"
}
我想按照像name,age,gender
這樣的順序解析列表,但是使用ios,當我將json對象轉換爲字典時,順序發生了變化,我知道字典沒有排序,所以實現此目的的替代方法是什麼?
它的第三方api所以我沒有任何的手,我們已經在android中使用鏈接哈希映射完成它,但真的卡在迅速,我想要做的最後一件事是用正則表達式解析。
IM解析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;
}
正如你所說,字典沒有秩序,所以你爲什麼需要保持秩序?該命令無關緊要。 – rmaddy
正如我所說的用戶配置文件數據,我需要按照順序來顯示它,所以首先命名,然後是年齡,然後是性別。如果在用戶配置文件年齡第一,然後名稱然後性別,這將看起來很奇怪。 可能有數百萬的原因,所以問題不是爲什麼,問題是如何。 –
而不是字典使用自定義結構或類 – vadian