【问题标题】:How to convert a string into JSON using SwiftyJSON如何使用 SwiftyJSON 将字符串转换为 JSON
【发布时间】:2016-08-12 08:38:05
【问题描述】:

要转换的字符串:

[{"description": "Hi","id":2,"img":"hi.png"},{"description": "pet","id":10,"img":"pet.png"},{"description": "Hello! :D","id":12,"img":"hello.png"}]

转换字符串的代码:

var json = JSON(stringLiteral: stringJSON)

字符串被转换为 JSON,当我尝试计算这个 JSON 中有多少块(预期答案 = 3)时,我得到 0。

print(json.count)

控制台输出:0

我错过了什么?非常感谢您的帮助。

【问题讨论】:

  • 如果我没记错的话是:json.array.count
  • 当我打印“json”时,它会显示所有数据,但是当我打印“json.count”时,它会显示 0 而不是 3:C

标签: ios json swift swifty-json


【解决方案1】:

我就是这样修的。

我将使用变量“string”作为包含 JSON 的变量。

1.

像这样用 NSData 对字符串进行编码

var encodedString : NSData = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)!
  1. 对编码后的字符串进行解编码(这听起来可能有点奇怪,呵呵):

    var finalJSON = JSON(数据: 编码字符串)

然后你可以用这个 JSON 做任何你喜欢的事情。

就像获取其中的部分数量(这是真正的问题)

finalJSON.countprint(finalJSON[0]) 或任何你喜欢做的事情。

【讨论】:

    【解决方案2】:

    其实 SwifyJSON 中有一个内置函数叫parse

    /**
     Create a JSON from JSON string
    - parameter string: Normal json string like '{"a":"b"}'
    
    - returns: The created JSON
    */
    public static func parse(string:String) -> JSON {
        return string.dataUsingEncoding(NSUTF8StringEncoding)
            .flatMap({JSON(data: $0)}) ?? JSON(NSNull())
    }
    

    注意

    var json = JSON.parse(stringJSON)
    

    现在改成

    var json = JSON.init(parseJSON:stringJSON)
    

    【讨论】:

    • 构造函数参数已重命名为 parseJSON → JSON.init(parseJSON: stringJSON)
    • 这应该是公认的答案,因为它避免了创建临时数据对象。
    • 参数标签parseString 给我一个错误。这对我有用JSON.init(parseJSON:stringJSON)
    • 请将此 var json = JSON.init(parseJSON:stringJSON) 移到您的答案之上
    • 天哪,你救了我
    【解决方案3】:

    我使用如下:

    let yourString = NSMutableString()
    
    let dataToConvert = yourString.data(using: String.Encoding.utf8.rawValue)
    
    let json = JSON(data: dataToConvert!)
    
    print("\nYour string: " + String(describing: json))
    

    【讨论】:

      【解决方案4】:

      Swift4

      let json = string.data(using: String.Encoding.utf8).flatMap({try? JSON(data: $0)}) ?? JSON(NSNull())
      

      【讨论】:

      • 它无法编译,因为 $0 是 UInt8 并且不是 JSON(data:) 的有效参数类型。尽管没有编译,但我看不出这将如何产生 json,因为它创建了一个数组(flatMap)。
      • $0 部分在 ForEach 循环中使用,因此它在技术上可以工作。
      【解决方案5】:

      SwiftyJSON 中有一个内置的解析器:

      let json = JSON.init(parseJSON: responseString)
      

      别忘了导入 SwiftyJSON!

      【讨论】:

        猜你喜欢
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 2011-03-23
        • 1970-01-01
        相关资源
        最近更新 更多