Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从OpenFoodFactsJSON(Swift)解码_Json_Swift_Jsondecoder - Fatal编程技术网

如何从OpenFoodFactsJSON(Swift)解码

如何从OpenFoodFactsJSON(Swift)解码,json,swift,jsondecoder,Json,Swift,Jsondecoder,我对从JSON文件解码相当陌生 我的问题是,我如何解码找到这个:“product\u name\u en”:“Coca-Cola”(该文件还有很多内容,但不是节点) 我的结构设置为: struct ParseStructs : Decodable { var product_name_en : String } 我的检索代码是: var testCall = "https://world.openfoodfacts.org/api/v0/product/5449000000996.j

我对从JSON文件解码相当陌生

我的问题是,我如何解码找到这个:
“product\u name\u 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(编码键(stringValue:“产品名称”,intValue:无), Swift.DecodingError.Context(编码路径:[],调试说明:“否 与键编码键关联的值(stringValue:\“product\u name\u en\”, intValue:nil)(“产品名称””,underlineError: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)
让product=decoded.product
还有其他方法可以解决此问题,请查看的“处理对象环绕键”部分