字典错误的顺序 - JSON

时间:2015-06-27 12:51:12

标签: swift foundation

我正在尝试创建一个字典,我可以将其制作成JSON格式的对象并发送到服务器。

示例:

    var users = [
[
"First": "Albert", 
"Last": "Einstein", 
    "Address":[
        "Street": "112 Mercer Street",
        "City": "Princeton"]
],
[
"First": "Marie", 
"Last": "Curie", 
    "Address":[
        "Street": "108 boulevard Kellermann",
        "City": "Paris"]]
]

我使用此功能

func nsobjectToJSON(swiftObject: NSObject) -> NSString {
    var jsonCreationError: NSError?
    let jsonData: NSData = NSJSONSerialization.dataWithJSONObject(swiftObject, options: NSJSONWritingOptions.PrettyPrinted, error: &jsonCreationError)!
    var strJSON = NSString()

    if jsonCreationError != nil {
        println("Errors: \(jsonCreationError)")
    }
    else {
        // everything is fine and we have our json stored as an NSData object. We can convert into NSString
        strJSON =  NSString(data: jsonData, encoding: NSUTF8StringEncoding)!
        println("\(strJSON)")
    }
    return strJSON
}

但我的结果是:

[
  {
    "First" : "Albert",
    "Address" : {
      "Street" : "112 Mercer Street",
      "City" : "Princeton"
    },
    "Last" : "Einstein"
  },
  {
    "First" : "Marie",
    "Address" : {
      "Street" : "108 boulevard Kellermann",
      "City" : "Paris"
    },
    "Last" : "Curie"
  }
]

问题:为什么姓氏最后?我认为应该高于地址。请让我知道我在NSDictionary上做错了什么,因为这出错了。非常感谢任何帮助 - 谢谢。

2 个答案:

答案 0 :(得分:7)

发布评论中已经说过的内容:字典是“无序集合”。他们对其键/值对没有任何订单。周期。

如果您想要有序集合,请使用字典以外的其他内容。 (单项词典数组是一种方法。)您还可以编写将字典的键加载到可变数组中的代码,对数组进行排序,然后使用排序的键数组来获取键/值对。期望的顺序。

您还可以创建自己的集合类型,使用字符串作为索引,并按顺序保留项目。 Swift使这很简单,虽然它的计算成本很高。

答案 1 :(得分:-2)

我确实喜欢这个。

 let stagesDict = NSDictionary()
 if let strVal = sleepItemDict["stages"] as? NSDictionary {
 stagesDict = strVal
let sortedKeys = (stagesDict.allKeys as! [String]).sorted(by: <) 
 var sortedValues : [Int] = []
  for key in sortedKeys {
     let value = stagesDict[key]!
      print("\(key): \(value)")
      sortedValues.append(value as! Int)
    }
}