【问题标题】:how to parse string array with SwiftyJSON?如何使用 SwiftyJSON 解析字符串数组?
【发布时间】:2015-01-22 00:53:24
【问题描述】:

使用SwiftyJSON 如何将以下 JSON 数组解析为 Swift [String]

{
    "array": ["one", "two", "three"]
}

我已经尝试过这段代码,但它对我不起作用:

for (index: String, obj: JSON) in json["array"] {
        println(obj.stringValue)
    }

处理此问题的最佳方法是什么?谢谢。

【问题讨论】:

    标签: ios json swift


    【解决方案1】:
    {
        "myArray": ["one", "two", "three"]
    }
    

    使用 SwiftyJSON,您可以通过以下方式获取 JSON 对象数组:

    var jsonArr:[JSON] = JSON["myArray"].arrayValue
    

    然后,函数式编程使您可以使用“map”函数轻松转换为 [String]。 SwiftyJson 让你用下标 '.string' 转换字符串类型

    var stringArr:[String] = JSON["myArray"].arrayValue.map { $0.stringValue}
    

    【讨论】:

    • map 闭包中的 s 是什么?
    • 啊抱歉,我现在编辑了,应该是 '$0' 这就是地图关闭的简写参数。 .map() 将遍历 json 数组的每个元素,并每次将值分配给 $0。
    • 谢谢。我面临着与 SwiftyJSON 和数组类似的问题。我尝试像在您的答案中那样转换它,但它因错误unexpectedly found nil while unwrapping an Optional value而崩溃。我发布了一个单独的问题here。如果可以的话,可以请你看看吗?谢谢。
    • 当接收到包含非字符串值的 json 数组时,这将在运行时失败。我建议改为:JSON["myArray"].arrayValue.map { "\($0)" }.
    • 只需使用 .stringValue 而不是 .string 和 nil 或错误类型只会返回一个空字符串。 JSON["myArray"].arrayValue.map { $0.stringValue }
    【解决方案2】:

    SwiftyJSON 允许您使用 $0.string 提取 String? 或使用 stringValue 提取非可选 String,如果类型不匹配,则默认为空字符串值。

    如果你想确保有一个非误报的字符串数组,请使用:

    var stringArray = self.json["array"].array?.flatMap({ $0.string })

    或在 Swift 4.1 中

    var stringArray = self.json["array"].array?.compactMap({ $0.string })

    您还可以将self.json["array"].array 替换为self.json["array"].arrayValue 以获得[String] 结果而不是[String]?

    【讨论】:

    • 可以使用flatMap过滤等于nil的字符串
    • 谢谢@PabloMarrufo。改进了它的回复以及 Swift 4.1 中引入的 compactMap
    【解决方案3】:

    您有一个Dictionary,其中包含一个Array,其中包含Strings。当您访问Dictionary 中的值时,它会返回一个简单的ArrayStrings。您可以像迭代任何数组一样对其进行迭代。

    for obj in json["array"] {
        println(obj.stringValue)
    }
    

    【讨论】:

      【解决方案4】:

      只需这样做:

      for stringInArray in json["array"]{
      
          let value = stringInArray.1.stringValue
      }
      

      【讨论】:

        猜你喜欢
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 2018-12-18
        • 1970-01-01
        相关资源
        最近更新 更多