как получить формат JSON из массива? — swift

#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 { ...