如何使用SwiftyJSON将字符串转换为JSON

34

需要转换的字符串:

[{"description": "嗨","id":2,"img":"hi.png"},{"description": "宠物","id":10,"img":"pet.png"},{"description": "你好! :D","id":12,"img":"hello.png"}]

用于转换字符串的代码:

var json = JSON(stringLiteral: stringJSON)

该字符串已被转换为JSON格式。当我尝试计算此JSON中有多少块(期望的答案= 3)时,结果为0。

print(json.count)

控制台输出:0

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


如果我没记错的话,应该是:json.array.count。 - Darko
当我打印“json”时,它显示了所有数据,但是当我打印“json.count”时,它显示0而不是3 :C。 - Gabo Cuadros Cardenas
5个回答

60

实际上,SwiftyJSON 中有一个名为 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)

4
构造函数参数已更名为parseJSON → JSON.init(parseJSON: stringJSON) - Maximelc
这应该是被接受的答案,因为它避免了创建临时数据对象。 - Lensflare
1
参数标签parseString给我一个错误。这个对我有用JSON.init(parseJSON:stringJSON) - Leonard
请将此代码 var json = JSON.init(parseJSON:stringJSON) 放置在您的答案顶部 - nickeyzzz
哦,你救了我。 - Abhishek Thapliyal

15

我用以下方法进行修复。

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

1.

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

var encodedString : NSData = (string as NSString).dataUsingEncoding(NSUTF8StringEncoding)!
  1. 将编码后的字符串还原(这可能有点奇怪 嘿嘿嘿):

    var finalJSON = JSON(data: encodedString)

之后你可以对这个JSON做任何你想做的事情。

比如获取它里面的部分数目(这才是真正的问题),使用

finalJSON.countprint(finalJSON[0]) 或者其他你喜欢的方法。


5
SwiftyJSON内置了一个解析器:
let json = JSON.init(parseJSON: responseString)

别忘了导入 SwiftyJSON!


2

我正在使用以下内容:

let yourString = NSMutableString()

let dataToConvert = yourString.data(using: String.Encoding.utf8.rawValue)

let json = JSON(data: dataToConvert!)

print("\nYour string: " + String(describing: json))

1

Swift4

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

它无法编译,因为$0是UInt8类型,而不是JSON(data:)的有效参数类型。尽管无法编译,但我不认为这会导致json,因为它生成了一个数组(flatMap)。 - Lensflare
部分“$0”在ForEach循环中使用,因此从技术上讲它可以工作。 - Unterbelichtet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接