我需要添加额外的布尔字段то制作可选择的品牌和型号表。 原始的json结构是:
maxscore2 <- function(x, y) {
w <- which(x == y[1])
v <- sapply(w, function(i) sum(x[i:(i+(length(y)-1))] == y, na.rm = TRUE))
max(v)
}
我需要在品牌和型号结构中添加isExpended:Bool = false。所以数组应该如下所示:
{
"brands": [
{
"id": "19",
"name": "Audi",
"sort": "1",
"num": 1,
"models": [
{
"id": "190",
"name": "TTS",
"num": 1
},
{
"id": "189",
"name": "TT",
"num": 2
},
{
"id": "188",
"name": "V8",
"num": 3
},
{
"id": "187",
"name": "SQ5",
"num": 4
}
],
......
我的模特:
{
"brands": [
{
---> "isExpanded": false,
"id": "19",
"name": "Audi",
"sort": "1",
"num": 1,
"models": [
{
---> "isExpanded": false,
"id": "190",
"name": "TTS",
"num": 1
},
让我使用json:
struct auto_data: Decodable {
var brands: [brands]
var gearbox: [gearbox]
var fuel: [fuel]
var version: String
}
struct brands: Decodable {
var id: String
var name: String
var sort: String
var num: Int
var models: [brand_models]
}
struct brand_models: Decodable {
var id: String
var name: String
var num: Int
}
我不想通过正确的结构遍历数组的所有元素并将它们放在另一个元素中。有没有其他方法可以改变数组的结构?
答案 0 :(得分:0)
一个简单的解决方案是解析您的JSON,然后通过迭代每个品牌来添加预期的新字段。最后,您必须将对象字符串化回JSON。
1. var obj = JSON.parse('{ your json }'); parse object
2. obj.brands(2)["isExpanded"] = false; add new propertie
3. JSON.stringify(obj) convert back to JSON
答案 1 :(得分:0)
首先,请遵循结构和类名以大写字母开头并且 CamelCased 的命名约定。进一步的名称结构以单数形式。在语言语义方面,您创建了一个BrandModel
,而不是一个BrandModels
如果您需要在符合Decodable
的结构中添加自定义成员,则必须指定CodingKeys
在大多数情况下,将已解码的struct成员声明为常量(let
)
struct Brand: Decodable {
private enum CodingKeys : String, CodingKey {
case id, name, sort, num, models
}
var isExpanded = false
let id: String
let name: String
let sort: String
let num: Int
let models: [BrandModel]
}
struct BrandModel: Decodable {
private enum CodingKeys : String, CodingKey {
case id, name, num
}
var isExpanded = false
let id: String
let name: String
let num: Int
}