JSON 从字典编码 [无法调用 'dataWithJSONObject ...]
JSON Encoding from Dictionary [ Cannot invoke 'dataWithJSONObject ...]
我有一本字典:
var schedule : [String:[(Bool,Bool)]]!//[Day:[(AMenabled:PMenabled)]]
我想将它解码为 json 文件,然后将其发送到服务器
调度对象是这样的:
["Sat":[ (true,true),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(true,true)
],
"Sun":[ (true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true)
],
"Mon":[ (true,true),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(true,false),
(true,true)
],
"Tue":[ (true,true),
(false,true),
(false,false),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true)
],
"Wed":[ (true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true),
(true,true),
(true,true)
],
"Thur":[ (true,true),
(false,true),
(true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false)
],
"Fri":[ (true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true),
(true,true),
(true,false)
]
]
我想解码成这样的 JSON 文件:
{
"parental_control": {
"user_id": 57,
"profile": 1,
"chat": false,
"forum_read": false,
"forum_write": false,
"days": [
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
false,
true
],
[
true,
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
false,
true
]
]
}
}
所以在不关心 json 文件中的 parentalcontrol 和其他键的情况下,如何实现到 json 文件的映射:
我试过什么?
我试过使用内置 NSJSONSerialization
var json = NSJSONSerialization.dataWithJSONObject(self.schedule, options: NSJSONWritingOptions.PrettyPrinted,error: nil)
但我收到此错误:
cannot invoke dataWithJSONObject with an argument list of type
'([String:[(Bool,Bool)]]!,options:NSJSONWritingOptions,error:nil)'
您收到的错误是因为 NSJSONSerialization
在序列化您的 (Bool, Bool)
元组时遇到问题(元组在 JSON 中不可用)。您必须将它们转换为适当的类型才能序列化它们。
还有,这里是NSJSONSerialization
documentation的第一段。您可以将其用作有效类型的参考(请注意 Swift 的各个类型,如字符串、数组、字典等当然会按预期工作):
An object that may be converted to JSON must have the following
properties:
The top level object is an NSArray or NSDictionary.
All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or
NSNull.
All dictionary keys are instances of NSString.
Numbers are not NaN or infinity.
我重写了您的示例,它使用数组而不是元组。因为 NSJSONSerialization
无法处理元组,因为 JSON.
中没有这样的东西
var days = ["Mon", [true, false]]
let json = NSJSONSerialization.dataWithJSONObject(days, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
let _days = NSJSONSerialization.JSONObjectWithData(json!, options: NSJSONReadingOptions.allZeros, error: nil) as! Array<AnyObject>
println(_days[0]) // prints Mon
println(_days[1][0]) // prints 1
NSJSONSerialization
不包含元组,因此您可以将 schedule
定义为:
var schedule : [String:[Array<Bool>]]!
在 schedule
中插入数据:
schedule = ["Sat":[ [true,true],
[false,true],
[false,false],
[false,true],
[false,false]
],
"Sun":[ [true,true],
[false,true],
[true,true],
[false,true],
[true,true],
[false,true]
]]
现在您可以将其转换为 JSON 数据:
var jsonData = NSJSONSerialization.dataWithJSONObject(self.schedule, options: NSJSONWritingOptions.PrettyPrinted,error: nil)
我有一本字典:
var schedule : [String:[(Bool,Bool)]]!//[Day:[(AMenabled:PMenabled)]]
我想将它解码为 json 文件,然后将其发送到服务器
调度对象是这样的:
["Sat":[ (true,true),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(true,true)
],
"Sun":[ (true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true),
(true,true),
(false,true)
],
"Mon":[ (true,true),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(true,false),
(true,true)
],
"Tue":[ (true,true),
(false,true),
(false,false),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true)
],
"Wed":[ (true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true),
(true,true),
(true,true)
],
"Thur":[ (true,true),
(false,true),
(true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false)
],
"Fri":[ (true,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,false),
(false,true),
(false,true),
(true,true),
(true,false)
]
]
我想解码成这样的 JSON 文件:
{
"parental_control": {
"user_id": 57,
"profile": 1,
"chat": false,
"forum_read": false,
"forum_write": false,
"days": [
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
[
true,
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
false,
true
],
[
true,
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
false,
true
]
]
}
}
所以在不关心 json 文件中的 parentalcontrol 和其他键的情况下,如何实现到 json 文件的映射:
我试过什么?
我试过使用内置 NSJSONSerialization
var json = NSJSONSerialization.dataWithJSONObject(self.schedule, options: NSJSONWritingOptions.PrettyPrinted,error: nil)
但我收到此错误:
cannot invoke dataWithJSONObject with an argument list of type '([String:[(Bool,Bool)]]!,options:NSJSONWritingOptions,error:nil)'
您收到的错误是因为 NSJSONSerialization
在序列化您的 (Bool, Bool)
元组时遇到问题(元组在 JSON 中不可用)。您必须将它们转换为适当的类型才能序列化它们。
还有,这里是NSJSONSerialization
documentation的第一段。您可以将其用作有效类型的参考(请注意 Swift 的各个类型,如字符串、数组、字典等当然会按预期工作):
An object that may be converted to JSON must have the following properties:
The top level object is an NSArray or NSDictionary.
All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
All dictionary keys are instances of NSString.
Numbers are not NaN or infinity.
我重写了您的示例,它使用数组而不是元组。因为 NSJSONSerialization
无法处理元组,因为 JSON.
var days = ["Mon", [true, false]]
let json = NSJSONSerialization.dataWithJSONObject(days, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
let _days = NSJSONSerialization.JSONObjectWithData(json!, options: NSJSONReadingOptions.allZeros, error: nil) as! Array<AnyObject>
println(_days[0]) // prints Mon
println(_days[1][0]) // prints 1
NSJSONSerialization
不包含元组,因此您可以将 schedule
定义为:
var schedule : [String:[Array<Bool>]]!
在 schedule
中插入数据:
schedule = ["Sat":[ [true,true],
[false,true],
[false,false],
[false,true],
[false,false]
],
"Sun":[ [true,true],
[false,true],
[true,true],
[false,true],
[true,true],
[false,true]
]]
现在您可以将其转换为 JSON 数据:
var jsonData = NSJSONSerialization.dataWithJSONObject(self.schedule, options: NSJSONWritingOptions.PrettyPrinted,error: nil)