Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中格式化JSON字符串?_Json_Swift - Fatal编程技术网

如何在Swift中格式化JSON字符串?

如何在Swift中格式化JSON字符串?,json,swift,Json,Swift,我有一个JSON字符串,它遵循类似于{name:“John”}的格式,而不是{“name”:“John”}的格式,每当我尝试访问name键时,它都会导致nil,因为: Error Domain=NSCocoaErrorDomain code=3840“对象中字符1周围的值没有字符串键。” 我正在寻找一个函数,可以将这个JSON文件修复/解析/格式化为可读的格式?网站喜欢怎么做?有趣的是,{name:“John”}在Javascript中创建了一个有效的JSON对象。因此,现在的问题是为Swift

我有一个JSON字符串,它遵循类似于
{name:“John”}
的格式,而不是
{“name”:“John”}
的格式,每当我尝试访问name键时,它都会导致nil,因为:

Error Domain=NSCocoaErrorDomain code=3840“对象中字符1周围的值没有字符串键。”


我正在寻找一个函数,可以将这个JSON文件修复/解析/格式化为可读的格式?网站喜欢怎么做?

有趣的是,
{name:“John”}
在Javascript中创建了一个有效的JSON对象。因此,现在的问题是为Swift找到Javascript intepreter

Mac OS X和iOS的最新版本中有一个内置版本:
WKWebView
。它是一个带有Javascript解析器的web渲染引擎。将您的目标链接到WebKit,然后尝试以下操作:

import WebKit

class MyJSONParser {
    private static let webView = WKWebView()

    class func parse(jsonString: String, completionHandler: (AnyObject?, NSError?) -> Void) {
        self.webView.evaluateJavaScript(jsonString, completionHandler: completionHandler)
    }
}
用法:

let str = "{ firstName: 'John', lastName: 'Smith' }"

// You must assign the JSON string to a variable or the Javascript
// will return void. Note that this runs asynchronously
MyJSONParser.parse("tmp = \(str)") { result, error in
    guard error == nil else {
        print(error)
        return
    }
    if let dict = result as? [String: String] {
        print(dict)
    } else {
       print("Can't convert to Dictionary")
    }
}
斯威夫特3
您可以首先责怪字符串创建者;-)JSON字符串只是字符串类型的变量吗?@OlivierWilkinson是的,它是字符串类型的变量。请检查此项@威廉胡:我以前检查过。我无法从JSON Lint这样的站点复制粘贴已验证的字符串,我需要通过一个方法将该字符串转换为可读/有效的内容。当我在操场上尝试时,不会输出任何内容。这是我的建议。
import WebKit
class MyJSONParser {
    private static let webView = WKWebView()

    class func parse(jsonString: String, completionHandler: @escaping (Any?, Error?) -> Void) {
        self.webView.evaluateJavaScript(jsonString, completionHandler: completionHandler)
    }
}

let str = "{ firstName: 'John', lastName: 'Smith' }"

// You must assign the JSON string to a variable or the Javascript
// will return void. Note that this runs asynchronously
MyJSONParser.parse(jsonString: "tmp = \(str)") { result, error in
    guard error == nil else {
        print(error!)
        return
    }
    if let dict = result as? [String: String] {
        print(dict)
    } else {
        print("Can't convert to Dictionary")
    }
}