【问题标题】:Swift - check if JSON is validSwift - 检查 JSON 是否有效
【发布时间】:2015-11-26 00:08:40
【问题描述】:
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
}

我希望上面的代码仅在 jsonData 的内容实际上是有效的 JSON 时设置 validJson true。目前,如果我将任何内容注入到代码中可以看到的“myfile”文件中,validJson总是为真。

我该如何解决这个问题,所以 validJson 只有在它实际上是有效的 JSON 时才为真?

【问题讨论】:

  • 您能否举一个实际解析并报告为有效的无效数据的示例?
  • @Sulthan 我刚刚将 myfile 替换为 HTML 文件,但仍将 validJson 设置为 true。
  • 只使用 jsonString 的常量字符串,让测试用例更简单。
  • @zaph 谢谢,我现在将尝试直接设置该变量的值。
  • 为什么要将 NSData 转换为 NSString,然后再转换回 NSData?

标签: json swift


【解决方案1】:

我已经测试了以下内容:

let jsonString = ""

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

let jsonString = "{}"

带代码:

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

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

println("Valid JSON: \(validJson)")

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

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

【讨论】:

  • 感谢您解决这个问题。似乎是导致问题的生产代码中具有相同名称的两个变量。
【解决方案2】:
isValidJSONObject:

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

代码示例

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

    if JSONSerialization.isValidJSONObject(jsonData) {
        print("Valid Json")
    } else {
        print("InValid Json")
    }

API REFERENCE:

【讨论】:

  • 这个答案对我不起作用,请查看这个答案stackoverflow.com/questions/40635993/…
  • 是的,这个答案是错误的。 isValidJSONObject 实际上正好相反。 Returns a Boolean value that indicates whether a given object can be converted to JSON data.
  • 这不会检查 json 字符串是否有效。
  • 这个答案是错误的,应该从接受的答案中删除。你需要检查```试试? JSONSerialization.jsonObject(with: data, options: []) != nil ``` 如果要检查 Data 对象是否为有效 JSON,则为真。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 2015-09-26
  • 2012-02-04
  • 2015-09-28
  • 2015-06-19
  • 2022-01-19
相关资源
最近更新 更多