(Swift3) 可以 return 完整的 JSON 文件,但我不能 return 一个特定的值,我做错了什么?
(Swift3) Can return the full JSON file but I cannot return a specific value, what am I doing incorrectly?
我有一个这样命名的本地 JSON 文件:testTheJSON.json
{"myJSON":
[{
"ID1" :
{"name":"Stack",
"LastName": "Overflow"
},
"ID2" :
{"name":"Cat",
"last":"dog",
}
}
]
}
我尝试这样读取文件:
func parseJSON() {
let path = Bundle.main.path(forResource: "testTheJSON", ofType: "json")
let jsonData : NSData = NSData(contentsOfFile: path!)! as NSData!
let readableJSON = JSON(data: jsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)
var name = readableJSON["myJSON","ID1","name"]
print(readableJSON) //returns the full JSON script
print (name) //returns null
}
为什么 print(readableJSON)
return 完整 JSON 文件和 print(name)
return 为空?我是否错误地执行了 var name = readableJSON["myJSON","ID1","name"]
行?谢谢!
编辑:我正在使用 SwiftyJSON 框架 - 这是 JSON 方法的来源。我正在学习本教程:https://www.youtube.com/watch?v=_NfijT6mt6A
你正确地阅读你的testTheJSON.json文件的内容并要求SwiftyJSON解析它。 (您的代码对 NSData class 的使用相当糟糕,但这实际上并没有导致任何错误。)
问题是您的 testTheJSON.json 文件 无效 JSON. 因此解析失败并且nil
被返回——这实际上是正确的行为。因此,没有错。我们希望 解析器在收到无效数据时失败。
这实际上回答了问题,但作为奖励,我还会为您提供文件的 有效 版本:
{"myJSON":
[{
"ID1" :
{"name":"Stack",
"LastName": "Overflow"
},
"ID2" :
{"name":"Cat",
"last":"dog"
}
}
]
}
你看出区别了吗? (提示:在 "dog"
之后)
在那之后,您可以修复您的下标表达式,该表达式目前是错误的。应该是:
let name = readableJSON["myJSON"][0]["ID1"]["name"]
或者你可以写成:
let name = readableJSON["myJSON",0,"ID1","name"]
我有一个这样命名的本地 JSON 文件:testTheJSON.json
{"myJSON":
[{
"ID1" :
{"name":"Stack",
"LastName": "Overflow"
},
"ID2" :
{"name":"Cat",
"last":"dog",
}
}
]
}
我尝试这样读取文件:
func parseJSON() {
let path = Bundle.main.path(forResource: "testTheJSON", ofType: "json")
let jsonData : NSData = NSData(contentsOfFile: path!)! as NSData!
let readableJSON = JSON(data: jsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)
var name = readableJSON["myJSON","ID1","name"]
print(readableJSON) //returns the full JSON script
print (name) //returns null
}
为什么 print(readableJSON)
return 完整 JSON 文件和 print(name)
return 为空?我是否错误地执行了 var name = readableJSON["myJSON","ID1","name"]
行?谢谢!
编辑:我正在使用 SwiftyJSON 框架 - 这是 JSON 方法的来源。我正在学习本教程:https://www.youtube.com/watch?v=_NfijT6mt6A
你正确地阅读你的testTheJSON.json文件的内容并要求SwiftyJSON解析它。 (您的代码对 NSData class 的使用相当糟糕,但这实际上并没有导致任何错误。)
问题是您的 testTheJSON.json 文件 无效 JSON. 因此解析失败并且nil
被返回——这实际上是正确的行为。因此,没有错。我们希望 解析器在收到无效数据时失败。
这实际上回答了问题,但作为奖励,我还会为您提供文件的 有效 版本:
{"myJSON":
[{
"ID1" :
{"name":"Stack",
"LastName": "Overflow"
},
"ID2" :
{"name":"Cat",
"last":"dog"
}
}
]
}
你看出区别了吗? (提示:在 "dog"
之后)
在那之后,您可以修复您的下标表达式,该表达式目前是错误的。应该是:
let name = readableJSON["myJSON"][0]["ID1"]["name"]
或者你可以写成:
let name = readableJSON["myJSON",0,"ID1","name"]