繁体   English   中英

将String json转换为数组swift

[英]convert String json to array swift

我有一个JSON文件,并使用Alamofire进行了解析。 如何将接收到的String JSON文件转换为数组,如下所示:

["name1", "name2", "name3", "name4"]

这是打印时当前的Alamofire输出:

name1
name2
name3
name4

这是JSON文件:

    [
        {
            name: "name1
        },
        {
            name: "name2",
            detail: "10"
        },
        {
            name: "name2",
            detail: "11"
        },
        {
            name: "name3",
            detail: "12"
        },
        {
            name: "name4",
            detail: "13"
        }
    ]

alamofire:

AF.request(SEARCH_BASE_URL).response { (response) in
    do {
        self.se = try JSONDecoder().decode([Search].self, from: response.data!)
        for each in self.se {
            let list = Struct_Search(name: each.name, detail: each.detail)
            self.see.append(list)
            print(each.name)
        }
    } catch {
       print(error)
    }
}
let str = """
name1
name2
name3
name4
"""
let array = str.components(separatedBy: "\n")
print(array)
//["name1", "name2", "name3", "name4"]

@mehran kamalifard 更新了答案

    import Foundation

class nameModel {
    var name:String = "";

    init(withData:[String:String]) {
        if let nameStr = withData["name"] {
            self.name = nameStr
        }
    }
}


var finalResultArr:[String] = []
let dataArr = [[
        "name":"name1",
    ],
    [
        "name": "name2",
        "detail" : "10"
    ],
    [
        "name": "name3",
    ],
    [
        "name": "name4",
        "detail" : "10"
    ]
]

var namesList:[nameModel] = []
for data in dataArr {
    namesList.append(nameModel.init(withData: data))
}
finalResultArr = namesList.compactMap({$0.name})
print(finalResultArr)
//["name1", "name2", "name3", "name4"]

您可以使用以下代码进行操作,

var yourArray : []

Alamofire.request(your url here).validate().responseJSON { response in
    switch response.result {
    case .success:
        print("success")

        if let json = response.data {
            do{
                let data = try JSON(data: json)
                let yourString = data["your key"]
                print("Parsed String: \(yourString)")
       // now add that yourString into an array
                yourArray.append(yourString)
            }
            catch{
            print("JSON Error")
            }

        }
    case .failure(let error):
        print(error)
    }
}

map是你的朋友

self.se = try JSONDecoder().decode([Search].self, from: response.data!)
let names = self.se.map { $0.name }

为什么 Search 映射Struct_Search 这是多余的。

请愚弄我的代码。 我解析并从响应中获取列表名称。

Alamofire.request(SEARCH_BASE_URL).response { (response) in
        guard let data = response.data else { return }
        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let items = responseJSON as? [[String: Any]] {
            var names: [String] = []
            for item in items {
                if let name =  item["name"] as? String {
                    names.append(name)
                }
            }
            print("names: \(names)")
        } else {
           print("json is not array dictionary")
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM