#ios #arrays #json #swift #xcode
#iOS #массивы #json #swift #xcode
Вопрос:
Как получить формат JSON из массива? Это мой форматировщик JSON
{
"productName": "Lemonade",
"transaction": ["[2016-08-01 10:23:42] - Get product in warehouse",
"[2016-08-01 10:53:22] - Sent to customer"]
}
У меня ошибка с этим кодом. Я не знаю, как получить формат JSON из массива транзакций.
if let jsonObject = try JSONSerialization.jsonObject(with: returnData, options: .allowFragments) as? [String: AnyObject]
{
valSucceeded = (jsonObject["succeeded"] as? Bool)!;
valResponseCode = (jsonObject["responseCode"] as? String)!;
valResponseDescription = (jsonObject["responseDescription"] as? String)!;
valSerialNumber = (jsonObject["serialNumber"] as? String)!;
valProductName = (jsonObject["productName"] as? String)!;
if let transactionsArray = jsonObject["transactions"] as? Array<AnyObject> {
for transact in transactionsArray
{
if let transactionStr = transact["transactions"] as? String {
valTransactions = transactionStr
} else {
valTransactions = ""
}
}
}
let entryResult = TraceModel(succeeded: valSucceeded,
responseCode: valResponseCode,
responseDescription: valResponseDescription,
serialNumber: valSerialNumber,
productName: valProductName,
transactions: valTransactions);
traceArray.append(entryResult);
}
Комментарии:
1.
transactionsArray
кажется, содержит только строку. Что вы пытаетесь сделать? Добавить их в одно значение? Получить только последний?2. В вашем JSON ключом массива является «транзакция», а не «транзакции». И затем внутри цикла каждый элемент представляет собой просто строку, но вы пытаетесь снова получить доступ к ключу «транзакции»…
3. @EricAya Я совсем новичок в ios и swift, код должен выглядеть примерно так, верно?
if let transactionsArray = jsonObject["transaction"] as? Array<AnyObject> { for transact in transactionsArray { valTransactions = transact as? String } }
4. Конечно. Но теперь у вас есть другая проблема: в вашем цикле вы всегда присваиваете результирующую строку одной и той же
valTransactions
переменной. Следствие: эта переменная будет содержать только последнюю строку … 🙂5.
(jsonObject["succeeded"] as? Bool)!
это бессмысленно. Результат в любом случае является принудительно развернутым необязательным, так что вы можете записатьjsonObject["succeeded"] as! Bool
. Однако, если значение может отсутствовать, используйте необязательную привязкуif let succeeded = jsonObject["succeeded"] as? Bool { ...