Ios 更新swift 3中的字典值
我需要更新特定密钥的内容Ios 更新swift 3中的字典值,ios,iphone,swift,dictionary,swift3,Ios,Iphone,Swift,Dictionary,Swift3,我需要更新特定密钥的内容**(“IsFavorit”)***,如何在swift 3中实现?仅将responseData->index[1]->comeetic[]->“isfavorit”null更新为1 我可以这样设置字典的值 responseData[1][喜剧]![0][“IsFavorit”]=1无法在swift3中工作 如何将“IsFavorit”值设置为1 我只是试了一下 { "error": false, "error_msg": "Get trending data.",
**(“IsFavorit”)***
,如何在swift 3中实现?仅将responseData->index[1]->comeetic[]->“isfavorit”null更新为1
我可以这样设置字典的值
responseData[1][喜剧]![0][“IsFavorit”]=1
无法在swift3中工作
如何将“IsFavorit”值设置为1
我只是试了一下
{
"error": false,
"error_msg": "Get trending data.",
"Total_category": 2,
"responseData": [
{
"categoryName": "Trending",
"Trending": [
{
"category": "Trending",
"trailerPrice": "",
"isFavourit": null,
"isWatchlist": null
}
]
},
{
"categoryName": "Comedy",
"Comedy": [
{
"category": "Comedy",
"trailerPrice": "",
"isFavourit": null,
"isWatchlist": null
}
]
}
]
}
(arrVideoDetail[1][“喜剧”]as![Dictionary])[0][“IsFavorit”]=1
上面的代码显示错误无法分配给类型为“Any?”的不可变表达式。这是非常糟糕的JSON。问题是
responseData
数组中的字典没有一致的键。第一个有钥匙
(arrVideoDetail[1]["comedy"] as! [Dictionary<String,Any>])[0]["isFavourit"] = 1
但是第二个有钥匙
"categoryName": "Trending",
"Trending": [
这意味着在拉出categoryName
键的值之前,您不知道第二个键的名称。所以你必须停下来,然后才能继续
因此,假设您的JSON是一个名为JSON
的字符串。然后:
"categoryName": "Comedy",
"Comedy": [
配置完结构后,解析整个JSON只需一行代码!假设您的JSON位于名为
JSON
的变量中:
struct MyJson : Decodable {
let error : Bool
let error_msg : String
let Total_category : Int
let responseData : [ResponseData]
struct ResponseData : Codable {
let categoryName : String
let unknown : [Inner]
struct Inner : Codable {
let category : String
let trailerPrice : String
let isFavourit : String?
let isWatchList : String?
}
private struct CK : CodingKey {
var stringValue: String
init?(stringValue: String) { self.stringValue = stringValue }
var intValue: Int?
init?(intValue: Int) { return nil }
}
init(from decoder: Decoder) throws {
let con = try! decoder.container(keyedBy: CK.self)
self.categoryName = try! con.decode(String.self, forKey:CK(stringValue:"categoryName")!)
let key = self.categoryName
self.unknown = try! con.decode([Inner].self, forKey: CK(stringValue:key)!)
}
}
}
您试图访问的值可以非常简单地表达:
let myjson = try JSONDecoder().decode(MyJson.self, from: json.data(using: .utf8)!)
所以我所要做的就是把我所有的let
转换成var
,现在它们都可以设置了,就像你试图做的那样
(有关此解决方案的更多信息,请参阅。)请显示一些代码。您尝试了哪些代码?是否尝试搜索堆栈溢出?您无法找到管理此类JSON数据的任何内容。请考虑将类别映射到自定义对象(结构或类)和名称<代码> IsAdvIs< /Cl>意味着“代码> Boo.<代码>,而不是<代码> INT/C>。共享您所尝试的和您所得到的错误。@ USER1000请检查代码。
let myjson = try JSONDecoder().decode(MyJson.self, from: json.data(using: .utf8)!)
let fav = myjson.responseData[1].unknown[0].isFavourit