【问题标题】:How to include null value in the JSON via NSJSONSerialization?如何通过 NSJSONSerialization 在 JSON 中包含空值?
【发布时间】:2012-12-04 04:34:47
【问题描述】:

我想我知道如何使用 NSJSONSerialization。我打的电话是:

[NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error]

其中 parameters 是一个 NSDictionary,其中包含要在 JSON 请求中使用的键和值。一切都很好,直到我必须使用 null 作为值而不是空字符串。我根本找不到将值设置为 null 的方法。我需要创建的 json 示例是:

{"target"
  {"firstname":<firstname>,
   "lastname":<lastname>},
 "error":null
}

服务器的设置方式是它期待一个错误作为一个字符串或一个 null 如果没有错误。

有什么想法吗?我错过了 API 调用或类似的东西吗?

谢谢!

【问题讨论】:

    标签: objective-c ios json null nsjsonserialization


    【解决方案1】:

    你必须使用NSNull。比如

    斯威夫特

    let dict = ["firstKeyHasValue": 2342, "secondKeyHasNoValue": NSNull()]
    

    Objective-C

    NSDictionary *dict = @{ @"error": [NSNull null] };
    

    来自NSDictionary的官方文档:

    key 和 value 都不能为 nil;如果你需要在字典中表示一个空值,你应该使用 NSNull。

    【讨论】:

      【解决方案2】:

      试试这样的:

      NSDictionary *jsonObj = [NSDictionary dictionaryWithObjectsAndKeys:@"My Name", @"name", @"Developer", @"occupation", NULL, @"My NULL field", nil];
      

      并使用这个对象作为你想要的参数。

      【讨论】:

      • [NSNull null],不是 NULL。
      • 你不能在 NSDictionary 中插入 nil 值
      【解决方案3】:

      如果您使用的是 Swifty JSON,我刚刚创建了应该处理 nil 的 a PR。它尚未合并,可能需要一些改进。 描述如何做到这一点的part 应该是编写自己的实现(如果需要)的良好开端。逻辑并不复杂,但可能需要考虑棘手的边缘情况/性能问题。

      我知道这不是对这个问题的直接回应,因为它正在取代 NSJSONSerialization,但我希望它可以帮助一些对 Swift 如何处理 nil/json 感到沮丧的人!

      【讨论】:

        【解决方案4】:

        我尝试这样做并为我工作。

        var param: [String:Any] = [:]
        
        param["firstName"] = "somename"
        
        param["middleName"] = NSNull()
        
        param["lastName"] = "somename"
        
        print(param)
        

        结果:

        ["firstName":"somename","middleName":null,"lastName":"somename"]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-15
          • 1970-01-01
          • 2023-03-14
          • 2019-06-08
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          相关资源
          最近更新 更多