我在尝试从URL解析JSON时遇到错误。
以下是代码:
override func viewDidLoad() {
super.viewDidLoad()
print("hello")
let url=NSURL(string:"http://jsonReports/sample_testkrtk252.json")
print("hello2")
if let allContactsData=NSData(contentsOfURL:url!)
{
print(allContactsData)
do{
let allContacts: AnyObject! = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers)
print(allContacts)
if let json = allContacts as? Array<AnyObject> {
print(json)
for index in 0...json.count-1 {
let data12 : AnyObject? = json[index]
print(data12)
let collection = data12! as! Dictionary<String, AnyObject>
print(collection)
print(collection["data11"])
let data11 : AnyObject? = collection["data11"]
let cont : AnyObject? = collection["cont"]
data1.append(data11 as! String)
data2.append(cont as! String)
print(data1)
print(data2)
}
}
}
catch
{
print("error")
}
}
成功运行后,它会给出以下输出:
您好
hello2
&lt; 7b0d0a20 20202022 ...&gt;
错误
(lldb)
另外,它给出了错误:
NSError域:“NSCocoaErrorDomain” - 代码:3840 0x00007f8b62c9ef50 _userInfo __NSDictionaryI * 1键/值对0x00007f8b62dcb3c0
如果有人可以调查一下这将是很好的。另外,有没有更好的方法来解析Swift中的JSON?
答案 0 :(得分:0)
为什么不直接将AnyObject返回JSONObjectWithData转换为NSDictionary数组?像这样:
let allContacts = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers) as! [NSDictionary]
您确定您的JSON有效吗?斯威夫特对此非常敏感。确保所有键都被引用,你没有忘记任何大括号(特别是最外面的大括号)。
对于JSON解析,我建议SwiftyJSON使事情变得更容易。
答案 1 :(得分:0)
您的文件.json不是有效的结构。删除第一行:
"registration_id":APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ,
现在尝试运行代码:
func run()->(Void){
//insert you file .jso into project. Or change the code
let filePath = NSBundle.mainBundle().pathForResource("sample_testkrtk252", ofType:"json")
let nsMutData:NSData = NSData(contentsOfFile:filePath!)!
do{
let allContacts:[String:AnyObject] = try NSJSONSerialization.JSONObjectWithData(nsMutData, options: NSJSONReadingOptions.MutableContainers) as! [String : AnyObject]
print(allContacts)
for temp in 0...allContacts.count-1 {
print(temp)
}
} catch
{
print("error")
}
}
答案 2 :(得分:0)
感谢您的回答。 只是编辑json为我工作。 是的,确实需要正确地遵循格式,否则简单的双引号可能会破坏预期的输出。 :)
"registration_id":"APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ",
谢谢, Poulami