У меня получилась такая строка:
let arrayString : String = "[[1, 123, 0], [4, 003, 21]]"
и я хотел бы преобразовать эту строку в 2d-массив этого типа: [[String]].
Я пробовал использовать что-то вроде этих строк:
var array : [[String]] = arrayString as! [[String]]; // abort error
а также примерно так:
if let json = try? JSONSerialization.jsonObject(with: ucode.data(using: .utf8)!, options: []) {
let array = json as! [[String]];
print(array[0][0]) // prints nothing --> just ""
}
So I got no idea how I could solve this problem to convert:
"[[1, 123, 0], [4, 003, 21]]" ----> [["1", "123", "0"], ["4", "003", "21"]]
Любая помощь будет очень признательна, заранее миллион.
Привет, спасибо за комментарий - Нет, это одна из больших проблем: строка в формате int с недопустимым синтаксисом, например 003 вместо 3, но мне нужно вернуть строку типа «003», так что НЕТ. «3» в этом случае не годится! :)



Я попробовал протестировать ваш код и обнаружил эту ошибку:
let arrayString: String = "[[1, 123, 0], [4, 003, 21]]"
Error Domain=NSCocoaErrorDomain Code=3840 "Number with leading zero around character 19.
(003)
Это означает, ваш arrayString имеет неправильный формат json.
JSON string cannot have number with leading zero character.
Я удалил начальный нулевой символ из вашего arrayString, и он работал правильно.
let arrayString : String = "[[1, 123, 0], [4, 3, 21]]"
do {
let json = try JSONSerialization.jsonObject(with: arrayString.data(using: .utf8)!, options: [])
print(json)
} catch (let error) {
print(error.localizedDescription)
}
Спасибо за быстрый ответ, но это БОЛЬШАЯ проблема: мне нужны начальные нули «003» вместо «3».
Это не то решение, которое я хотел бы получить. -1
В основном это строка JSON, но сериализатор жалуется на ведущие нули.
Решение состоит в том, чтобы преобразовать целочисленные значения в String, добавив двойные кавычки перед для десериализации JSON. Этого можно просто добиться с помощью регулярного выражения
let arrayString = "[[1, 123, 0], [4, 003, 21]]"
let convertedArrayString = arrayString.replacingOccurrences(of: "\\d+", with: "\"$0\"", options: .regularExpression)
let data = Data(convertedArrayString.utf8)
do {
if let array = try JSONSerialization.jsonObject(with: data) as? [[String]] {
print(array)
}
} catch { print(error)}
Спасибо за ваше решение.
Возможно, это не связано, но в какой-то момент я думаю, что преобразование его в массив 2D ints приведет к тому, что «003» станет «3», вас это устраивает?