我对从JSON文件解码非常陌生。
我的问题是,我该如何解码才能找到它:("product_name_en": "Coca Cola"
该文件还有很多东西,但节点还没有)
我的结构设置为:
struct ParseStructs : Decodable {
var product_name_en : String
}
我的检索代码是:
var testCall = "https://world.openfoodfacts.org/api/v0/product/5449000000996.json"
func request(urlString : String ){
if let url = URL(string: urlString){
let session = URLSession(configuration: .default)
let task = session.dataTask(with :url) { (data , response , error) in
if(error != nil){
print(error!)
}
if let safeData = data{
print(safeData)
self.parseFunc(inputData: safeData)
}
}
task.resume()
}
}
func parseFunc(inputData : Data){
let decoder = JSONDecoder()
do{
let decode = try decoder.decode(ParseStructs.self, from: inputData)
print(decode)
}catch{
print(error)
}
}
我只是不断从终端行遇到这个可爱的问题:71733字节
keyNotFound(CodingKeys(stringValue:“ product_name_en”,intValue:nil),Swift.DecodingError.Context(codingPath:[],debugDescription:“没有与键CodingKeys相关联的值(stringValue:\” product_name_en \“,intValue:nil)(\ “ product_name_en \”)。“,underlyingError:nil))
我注意到许多这样的问题都因不喜欢而受到打击,但是任何帮助将不胜感激。
您的结构采用以下JSON结构:
{
"product_name_en": "Coca Cola"
}
实际上,您感兴趣的数据包装在另一个对象中:
{
"product": {
"product_name_en": "Coca Cola"
}
}
通常,您可以通过定义另一个中间结构来解决此问题:
struct Product: Decodable {
var product_name_en: String
}
struct ProductWrapper: Decodable {
var product: Product
}
然后在您的parseFunc
函数中对此进行解码:
let decoded = try decoder.decode(ProductWrapper.self, from: inputData)
let product = decoded.product
还有其他方法可以解决此问题,请查看本指南的“使用对象包装键进行处理”部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句