如何从 openFoodFacts JSON(Swift) 解码
How do I decode from openFoodFacts JSON(Swift)
我对从 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: "No
value associated with key 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
还有其他方法可以解决此问题,请查看 this awesome guide 的 "Dealing with Object Wrapping Keys" 部分。
我对从 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: "No value associated with key 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
还有其他方法可以解决此问题,请查看 this awesome guide 的 "Dealing with Object Wrapping Keys" 部分。