Swift - 检查JSON是否有效

jsk*_*dd3 7 json swift

let data = NSData(contentsOfFile: "myfile")
let jsonString = NSString(data: data, encoding: NSUTF8StringEncoding)
let jsonData: NSData! = jsonString.dataUsingEncoding(NSUTF8StringEncoding)!
var validJson = false

if (NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) != nil) {
    validJson = true
}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码只validJson在jsonData的内容实际上是有效的JSON时设置为true.此时如果我抽什么成可以在代码中看到了"MYFILE"文件的那一刻,validJson永远正确的.

我怎样才能解决这个问题,validJson只有当它实际上是有效的JSON时才会这样?

Ash*_*k R 13

isValidJSONObject:
Run Code Online (Sandbox Code Playgroud)

返回一个布尔值,指示是否可以将给定对象转换为JSON数据.

代码示例

    let jsonString = "{}"
    let jsonData = jsonString.data(using: String.Encoding.utf8)

    if JSONSerialization.isValidJSONObject(jsonData) {
        print("Valid Json")
    } else {
        print("InValid Json")
    }
Run Code Online (Sandbox Code Playgroud)

API参考:

  • 这个答案对我不起作用,请查看这个答案 /sf/ask/2844519541/ (2认同)
  • 是的,这个答案是错误的。`isValidJSONObject` 实际上正好相反。`返回一个布尔值,指示给定对象是否可以转换为 JSON 数据。` (2认同)
  • 这不会检查 json 字符串是否有效。 (2认同)
  • 这个答案是错误的,应该从接受的答案中删除。你需要检查```试试?JSONSerialization.jsonObject(with: data, options: []) != nil ``` 如果你想检查 Data 对象是否是有效的 JSON,则为 true 或 not。 (2认同)

Sul*_*han 3

我已经测试了以下内容:

let jsonString = ""

let jsonString = "<html></html>"

let jsonString = "{}"
Run Code Online (Sandbox Code Playgroud)

与代码:

let jsonData: NSData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)!
var error: NSError? = nil

let validJson = (NSJSONSerialization.JSONObjectWithData(jsonData, options:nil, error: &error) != nil)

println("Valid JSON: \(validJson)")
Run Code Online (Sandbox Code Playgroud)

前两个字符串 print false,第三个字符串true按预期打印。

我认为您加载的文件可能与您预期的不同。