我在将API的数据解析为Dictionary时遇到了一些问题。 我一直收到错误
Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}
但如果我尝试使用此代码打印它:
if let s:NSString = String(data: data!, encoding: NSUTF8StringEncoding) {
print(s)
}
它打印的内容如下:
({"user":{"id":4008257,"firstname":"FIRSTNAME","lastname":"LASTNAME","role":"ROLE"},"timetable":[[{"date":"2015-11-09","lessons":[{"id":42563,"title":"SUBJECT","location":"ROOM","acronym":"TEACHER","class":"CLASS","start":"2015-11-09T08:35:00+01:00","end":"2015-11-09T09:15:00+01:00","duration":2400,"eventType":"lesson"}, {"id":...}, ...]}, {"date":"...", ...}, ...]]})
要将数据解析为我使用的词典:
let dict:NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary
我现在已经坚持这个问题好几个小时了,我想我已经尝试了所有可能的变量类型组合和NSJSONReadingOptions
当我使用.MutableContainers而不是.AllowFragments时,我得到的错误是:
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
所以我添加了选项.AllowFragments。
我还检查了我能够打印的字符串是否是有效的JSON对象。我不得不删除它周围的(),但它是有效的。所以我询问提供数据的公司,如果他们犯了错误,但他们说一切正常。
有人能告诉我我做错了吗?
答案 0 :(得分:0)
正如错误所说,“JSON文本没有以数组或对象开头” - JSON无效,这不是你的代码有问题。您可以通过将JSON粘贴到在线JSON阅读器(例如http://jsonlint.com - 这与iOS相同的内容来验证这一点。
如果JSON的提供者不会以其他格式提供它,则必须通过删除第一个和最后一个字符来清除代码中的字符。