代码之家  ›  专栏  ›  技术社区  ›  user9591123

转换字符串?

  •  0
  • user9591123  · 技术社区  · 7 年前

    我得到了这样的字符串:

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

    所以我不知道如何解决这个问题来转换:

    "[[1, 123, 0], [4, 003, 21]]" ----> [["1", "123", "0"], ["4", "003", "21"]]
    

    任何帮助都将不胜感激,提前万分感谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   vadian    7 年前

    基本上,这个字符串是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)}
    
        2
  •  0
  •   Ankit Jayaswal    7 年前

    我尝试测试您的代码,发现以下错误:

    let arrayString: String = "[[1, 123, 0], [4, 003, 21]]"
    

    错误域=NSCOCAERRORDOMAIN Code=3840“数字,在字符19周围带前导零。 (003)

    这意味着, 你的 arrayString json格式不正确。

    JSON字符串不能具有前导零字符的数字。

    我从数组字符串中删除了前导零字符,它工作正常。

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