首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 4- SwiftyJson比较数组和合并找到的值

Swift 4- SwiftyJson比较数组和合并找到的值
EN

Stack Overflow用户
提问于 2018-01-15 12:39:08
回答 2查看 663关注 0票数 1

我有一个JSON对象,它包含一个名称和值的列表。我想将另一个数组[String]与它进行比较,如果在一个JSON对象值中找到该值,则将该值合并为一个新对象。

我尝试过在merge(with)循环中使用for,但是,它似乎只是合并一个值。

例如:> json_cat =>>{> name:"aaa",>姓氏:"aaa-1",>年级:"aaa-2“> },>{> name:"bbb",>姓氏:"bbb-1",>年级:"bbb-2”> },>{> name:"ccc",>姓氏:"ccc-1",>等级:"ccc-2“>}> // >让arraytest:String = "aaa","ccc","ddd”> // json_cat比较数组数组>结果={>名称:"aaa",>姓氏:"aaa-1",>等级:"aaa-2“> },>{> name:"ccc",>姓氏:"ccc-1",>年级:"ccc-2“>}

代码语言:javascript
复制
let json_cat: JSON = "json from url" 
let arraytest:[String] = ["aaa", "ccc", "ddd"]
var json_cat_array = JSON()

    json_cat.forEach({ (index, json_p) in
                    if arraytest.contains(json_p["name"].string!) {
                        //print("\(index) - \(json_p)")
                        try! json_cat_array.merge(with: json_p)

                    }
                })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 13:50:38

您可以这样实现您的循环:

代码语言:javascript
复制
json_cat.forEach({ (index, json_p) in
    if arraytest.contains(json_p["name"].string!) {
        //print("\(index) - \(json_p)")

        json_cat_array[json_p["name"].string!] = json_p

    }
})

合并函数实际上是用于合并数据的。如本例所示:

代码语言:javascript
复制
let original: JSON = [
    "first_name": "John",
    "age": 20,
    "skills": ["Coding", "Reading"],
    "address": [
        "street": "Front St",
        "zip": "12345",
    ]
]

let update: JSON = [
    "last_name": "Doe",
    "age": 21,
    "skills": ["Writing"],
    "address": [
        "zip": "12342",
        "city": "New York City"
    ]
]

let updated = original.merge(with: update)
// [
//     "first_name": "John",
//     "last_name": "Doe",
//     "age": 21,
//     "skills": ["Coding", "Reading", "Writing"],
//     "address": [
//         "street": "Front St",
//         "zip": "12342",
//         "city": "New York City"
//     ]
// ]
票数 0
EN

Stack Overflow用户

发布于 2018-01-15 13:13:07

此代码使用Swift 4基金会JSON解析器。Swift 4默认拥有神奇的解析器。

代码语言:javascript
复制
import Foundation
let jsonString = """
        [{
        "surname": "Roxxy",
        "grade": "neaou"
        },
        {
        "name": "Puffi",
        "surname": "Chips",
        "grade": "meaou"
        },
        {
        "name": "Taffy",
        "surname": "Baby",
        "grade": "mew-mew"
        }]
"""
struct JsonCat: Decodable {
    let name: String?
    let surname: String
    let grade: String
}

struct Cat {
    let name: String
    let surname: String
    let grade: String
}


guard let jsonData = jsonString.data(using: .utf8), let jsonCats = try? JSONDecoder().decode([JsonCat].self, from: jsonData) else {
    fatalError()
}

var cats: [Cat] = []
jsonCats.forEach { jsonCat in
    guard let name = jsonCat.name else {
        return
    }
    let cat = Cat(name: name, surname: jsonCat.surname, grade: jsonCat.grade)
    cats.append(cat)
}

print(cats)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48263221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档