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

Swift中的JSON到数组

  •  1
  • Yoohogyun  · 技术社区  · 9 年前

    我正在使用Swift2.0+、SwiftyJSON、Alamofire

    我明白了价值 let stringJSON:JSON = ["a1","a2","a3"] 来自服务器

    但如果我检查 stringJSON[0] ,那就是 null

    当我 debugPrint(stringJSON) ,那就是 ["a1","a2","a3"]

    我如何获得价值 stringJSON[0] //"a1" ?

    我必须从JSON转换为另一个吗?

    4 回复  |  直到 9 年前
        1
  •  2
  •   Luca Angeletti    9 年前

    正确的语法是

    let stringJSON:JSON = ["a1","a2","a3"]
    
    if let firstValue = stringJSON.array?.first {
        print(firstValue) // a1
    }
    

    使现代化

    因为值实际上包含此字符串 "[\"a1\/a1\",\"a2\/a2\",\"a3\"]" 你不能在服务器端解决这个问题,这是一个解决方法。

    if let words = stringJSON.string?.characters.dropFirst().dropLast().split(",").map(String.init) {
        let word = String(words[0].characters.dropFirst().dropLast())
        print(word) // a1
    }
    
        2
  •  1
  •   elmarko    9 年前
    if let x = stringJSON[0].string{
    print(x)
    }
    
        3
  •  1
  •   fdiaz    9 年前

    由于服务器不是返回数组,而是返回字符串,因此需要将其转换为字符串数组,如下所示:

    let string = stringJSON.string
    let array = string.stringByReplacingOccurrencesOfString("[", withString: "")
        .stringByReplacingOccurrencesOfString("]", withString: "")
        .stringByReplacingOccurrencesOfString("\"", withString: "")
        .componentsSeparatedByString(",")
    
        4
  •  0
  •   Mr.任帠   9 年前

    stringJSON如果它是字符串类型,您可以这样解决:

    extension String {
    
    var parseJSONString: AnyObject? {
        var any: AnyObject?
        let data = self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
        do{
            any = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)
        }catch let error as NSError{
            print("error: \(error)")
        }
        return any
    }
    

    并像这样使用:

    let strArr = stringJSON.stringvalue.parseJSONString as! Array<String>