Reputation: 31
Hi I am currently trying to parse a JSON array produced by alamofire as below:
[
{
"UUID": "31ea524c-4d19-46f7-b3ec-c9264f9dbc78"
},
{
"UUID": "d0c89800-bbae-4189-88ab-503c6b68b511"
}
]
I need to take these values and present them as a comma delimited string so they look like this:
"31ea524c-4d19-46f7-b3ec-c9264f9dbc78, d0c89800-bbae-4189-88ab-503c6b68b511"
Alamofire.request(URL_GET_ORDER, method: .post, parameters: parameters).responseJSON
{
response in
//printing response
print(response)
if let result = response.result.value {
let jsonData = result as! NSArray
}
I need to take the data from the above array pass it to a string and then input that sting into this code to produce a QRcode that can then be scanned as part of a click and collect system:
let myString = "*JOINED STRING GOES HERE*"
// Get data from the string
let data = myString.data(using: String.Encoding.ascii)
// Get a QR CIFilter
guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return }
// Input the data
qrFilter.setValue(data, forKey: "inputMessage")
// Get the output image
guard let qrImage = qrFilter.outputImage else { return }
// Scale the image
let transform = CGAffineTransform(scaleX: 10, y: 10)
let scaledQrImage = qrImage.transformed(by: transform)
// Do some processing to get the UIImage
let context = CIContext()
guard let cgImage = context.createCGImage(scaledQrImage, from: scaledQrImage.extent) else { return }
let processedImage = UIImage(cgImage: cgImage)
self.myImageView.image = processedImage
I have already tried a lot of solutions like the following one below:
let stringRepresentation = jsonData.joinWithSeparator("-")
and:
let objCArray = NSMutableArray(array: jsonData)
let swiftArray = objCArray as NSArray as? [String]
print(swiftArray ?? "BrokeAgain!!") // returns nil
let nustr = swiftArray?.joined(separator:",")
Upvotes: 0
Views: 136
Reputation: 916
The easiest way is to start with Codable
data model which represents a single object in your json array.
struct ResponseObject: Codable {
let uuid: String
}
Then you can decode the plain response data into an array of objects – it's easier to work with.
func getUUIDList(_ complection: @escaping (String?) -> Void) {
Alamofire
.request(URL_GET_ORDER, method: .post, parameters: parameters)
.response { response in
guard let data = response.data else {
completion(nil)
return
}
do {
let decoder = JSONDecoder()
let objects = try decoder.decode([ResponseObject].self, from: data)
completion(
objects
.map { $0.uuid }
.joined(separator: ", ")
)
} catch let error {
print(error)
completion(nil)
}
}
}
Finally replace your call Alamofire.request(URL_GET_ORDER, method: .post, parameters: parameters)...
with:
// somewhere you call the alamofire
getUUIDList() { responseString in
guard let responseString = responseString else { return }
// Get data from the string
let data = responseString.data(using: String.Encoding.ascii)
// Get a QR CIFilter
guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return }
// Input the data
qrFilter.setValue(data, forKey: "inputMessage")
// Get the output image
guard let qrImage = qrFilter.outputImage else { return }
// Scale the image
let transform = CGAffineTransform(scaleX: 10, y: 10)
let scaledQrImage = qrImage.transformed(by: transform)
// Do some processing to get the UIImage
let context = CIContext()
guard let cgImage = context.createCGImage(scaledQrImage, from: scaledQrImage.extent) else { return }
let processedImage = UIImage(cgImage: cgImage)
self.myImageView.image = processedImage
}
Please note, this is just a not testet guideline how you should do it. Do not expect the code will work after copy&paste, but is's a good starting point :)
Upvotes: 1