Swift 无法将 NSString 转换为 JSON
Swift Unable To Convert NSString To JSON
我正在使用 WKUserScript
在 UIWebView
和服务器之间进行通信。此特定代码将允许用户搜索地理位置。我在函数
中收到一条很好的消息
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)
变量 message
有一个 AnyObject
主体。我想将该值转换为 JSONObject
以便我可以访问它的内容。这是 message.body
:
{
"status":"OK",
"predictions":[
{
"description":"Dallas, TX, United States",
"id":"fa589a36153613fc17b0ebaebbea7c1e31ca62f0",
"matched_substrings":[{"length":6,"offset":0}],
"place_id":"ChIJS5dFe_cZTIYRj2dH9qSb7Lk",
"reference":"CkQxAAAAJNbPZRkdsyxuKT4FzFmgpBx9HWnZLNhxprRQB0zy62sHCXo3tkHfV_M5dK4Cabp2KL43nIKAAyrv_RI4qbvNfRIQ1dzEGuqywMIAlNg_1AKvoRoUQN32C2uNo4KzZ9j58lB-wjPpjJw",
"terms":[
{"offset":0,"value":"Dallas"},
{"offset":8,"value":"TX"},
{"offset":12,"value":"United States"}
],
"types":["locality","political","geocode"]},
{
"description":"Dallas Athletic Club Drive, Dallas, TX, United States",
"id":"37c4f8d416b9d3975ad57662eb022a0d410e8f76",
"matched_substrings":[{"length":6,"offset":0}],
"place_id":"EjVEYWxsYXMgQXRobGV0aWMgQ2x1YiBEcml2ZSwgRGFsbGFzLCBUWCwgVW5pdGVkIFN0YXRlcw",
"reference":"CkQ5AAAArHSWkIVO6uTH4qE6LxRHshWAfgSnMfxXiBxqf_ZO3O-xQ8RIKKHA9QT7LKwf6Ic788Bzy_I2FpemvcQhE6o5ZRIQ5td4XsjIiyX6D6_dgI3YIxoURu_oROPuOguuorK3Tw11veN7XJI",
"terms":[
{"offset":0,"value":"Dallas Athletic Club Drive"},
{"offset":28,"value":"Dallas"},
{"offset":36,"value":"TX"},
{"offset":40,"value":"United States"}
],
"types":["route","geocode"]
}
]
}
JSONObject
有一个状态,让我知道结果是否有效或是否发生错误。我正在使用 SwiftyJSON
创建和访问我的 JSON
。我创建 JSONObject
:
let json = JSON(message.body as! NSString)
我尝试访问状态键,如:
if let status = json["status"].string {
print("status: \(status)")
}
但是我无法到达打印语句。我注意到当您将 NSDictionary
和 JSON
打印到控制台时它们有换行符,但我认为这不会有什么不同。有谁知道为什么我无法从 JSON
?
检索状态变量
您不能直接用字符串初始化 SwiftyJSON 对象,您必须将此字符串转换为数据(如果是这种情况,或者使用您首先获得的数据)。
假设message.body
是一个字符串:
if let dataFromString = message.body.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
if let status = json["status"].string {
print("status: \(status)")
}
}
我正在使用 WKUserScript
在 UIWebView
和服务器之间进行通信。此特定代码将允许用户搜索地理位置。我在函数
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)
变量 message
有一个 AnyObject
主体。我想将该值转换为 JSONObject
以便我可以访问它的内容。这是 message.body
:
{
"status":"OK",
"predictions":[
{
"description":"Dallas, TX, United States",
"id":"fa589a36153613fc17b0ebaebbea7c1e31ca62f0",
"matched_substrings":[{"length":6,"offset":0}],
"place_id":"ChIJS5dFe_cZTIYRj2dH9qSb7Lk",
"reference":"CkQxAAAAJNbPZRkdsyxuKT4FzFmgpBx9HWnZLNhxprRQB0zy62sHCXo3tkHfV_M5dK4Cabp2KL43nIKAAyrv_RI4qbvNfRIQ1dzEGuqywMIAlNg_1AKvoRoUQN32C2uNo4KzZ9j58lB-wjPpjJw",
"terms":[
{"offset":0,"value":"Dallas"},
{"offset":8,"value":"TX"},
{"offset":12,"value":"United States"}
],
"types":["locality","political","geocode"]},
{
"description":"Dallas Athletic Club Drive, Dallas, TX, United States",
"id":"37c4f8d416b9d3975ad57662eb022a0d410e8f76",
"matched_substrings":[{"length":6,"offset":0}],
"place_id":"EjVEYWxsYXMgQXRobGV0aWMgQ2x1YiBEcml2ZSwgRGFsbGFzLCBUWCwgVW5pdGVkIFN0YXRlcw",
"reference":"CkQ5AAAArHSWkIVO6uTH4qE6LxRHshWAfgSnMfxXiBxqf_ZO3O-xQ8RIKKHA9QT7LKwf6Ic788Bzy_I2FpemvcQhE6o5ZRIQ5td4XsjIiyX6D6_dgI3YIxoURu_oROPuOguuorK3Tw11veN7XJI",
"terms":[
{"offset":0,"value":"Dallas Athletic Club Drive"},
{"offset":28,"value":"Dallas"},
{"offset":36,"value":"TX"},
{"offset":40,"value":"United States"}
],
"types":["route","geocode"]
}
]
}
JSONObject
有一个状态,让我知道结果是否有效或是否发生错误。我正在使用 SwiftyJSON
创建和访问我的 JSON
。我创建 JSONObject
:
let json = JSON(message.body as! NSString)
我尝试访问状态键,如:
if let status = json["status"].string {
print("status: \(status)")
}
但是我无法到达打印语句。我注意到当您将 NSDictionary
和 JSON
打印到控制台时它们有换行符,但我认为这不会有什么不同。有谁知道为什么我无法从 JSON
?
您不能直接用字符串初始化 SwiftyJSON 对象,您必须将此字符串转换为数据(如果是这种情况,或者使用您首先获得的数据)。
假设message.body
是一个字符串:
if let dataFromString = message.body.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
if let status = json["status"].string {
print("status: \(status)")
}
}