字典顺序错误 - JSON
Dictionary wrong order - JSON
我正在尝试创建一个字典,我可以将其制作成 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 时做错了什么,所以结果是错误的。非常感谢任何帮助 - 谢谢。
致post 评论中已经说过:字典是"unordered collections"。他们的 key/value 对根本没有任何顺序。期间.
如果你想要一个有序的集合,使用字典以外的东西。 (单项字典数组是一种方法。)您还可以编写代码,将字典的键加载到可变数组中,对数组进行排序,然后使用排序后的键数组获取 key/value 对按所需顺序。
您还可以创建自己的集合类型,使用字符串作为索引并使项目按排序顺序排列。 Swift 使这变得简单明了,尽管这在计算上会很昂贵。
我喜欢这个。
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)
}
}
我正在尝试创建一个字典,我可以将其制作成 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 时做错了什么,所以结果是错误的。非常感谢任何帮助 - 谢谢。
致post 评论中已经说过:字典是"unordered collections"。他们的 key/value 对根本没有任何顺序。期间.
如果你想要一个有序的集合,使用字典以外的东西。 (单项字典数组是一种方法。)您还可以编写代码,将字典的键加载到可变数组中,对数组进行排序,然后使用排序后的键数组获取 key/value 对按所需顺序。
您还可以创建自己的集合类型,使用字符串作为索引并使项目按排序顺序排列。 Swift 使这变得简单明了,尽管这在计算上会很昂贵。
我喜欢这个。
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)
}
}