0

I have a JSON file and parse that with Alamofire. How can I convert received String JSON file to array like this:

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

This is current Alamofire output when print:

name1
name2
name3
name4

This is the JSON file:

    [
        {
            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)
    }
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579

4 Answers4

0
let str = """
name1
name2
name3
name4
"""
let array = str.components(separatedBy: "\n")
print(array)
//["name1", "name2", "name3", "name4"]

@mehran kamalifard Updated Answer

    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"]
kannan
  • 354
  • 1
  • 7
0

You can do it using the below code,

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)
    }
}
Atmaram
  • 494
  • 4
  • 14
0

map is your friend

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

Why do you map Search to Struct_Search? This is redundant.

vadian
  • 274,689
  • 30
  • 353
  • 361
0

Please folly my code. Which i parsed and get list name from response.

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")
        }
    }