【问题标题】:Converting a Dictionary with a value of [NSNull null] to JSON将值为 [NSNull null] 的字典转换为 JSON
【发布时间】:2014-04-24 14:43:16
【问题描述】:

我正在尝试使用此代码:

NSDictionary *innerMessage 
      = @{@"nonce":[NSNumber numberWithInteger:nonce],
          @"payload":@{@"login": [NSNull null]}};

NSError * err;
NSData * innerMessageData = [NSJSONSerialization 
     dataWithJSONObject:innerMessage options:0  
     error:&err];

创建具有以下结构的JSON 对象:

{
    "apikey": "e418f5b4a15608b78185540ef583b9fc",
    "signature": "FN6/9dnMfLh3wZj+cAFr82HcSvmwuniMQqUlRxSQ9WxRqFpYrjY2xlvDzLC5+qSZAHts8R7KR7HbjiI3SzVxHg==",
    "message":{
        "nonce": 12, 
        "payload": {
            "Login": {}
        }
    }
}

但是,这是我得到的实际结果:

{"nonce":1398350092512,"payload":{"login":null}}
  • 为什么我的字典中的[NSNull null] 没有被转换为{}
  • 我需要如何更改我的代码才能获得正确的JSON 结构?

谢谢!

【问题讨论】:

    标签: ios objective-c json nsdictionary nsjsonserialization


    【解决方案1】:

    NSNull 应该在 JSON 中变成 null

    如果您想要 JSON 中的空字典 ({}),您应该使用空字典 - @{}

    【讨论】:

      【解决方案2】:

      修改代码

      NSDictionary *innerMessage = @{
                                         @"nonce":@12,
                                         @"payload":@{@"login": @{}}
                                    };
      
      NSError * err;
      NSData * innerMessageData = [NSJSONSerialization 
           dataWithJSONObject:innerMessage options:0  
           error:&err];
      

      这将创建所需的响应

      {
          nonce = 12,
          payload =  {
              login = {}
          },
      }
      

      【讨论】:

        【解决方案3】:

        null 是一个完全有效的 JSON 值;你在期待什么? NSJSONSerialization 应该如何知道您希望将 [NSNull null] 转换为空对象? (既然如此,为什么不将 null 转换为空数组、空列表或数字零?)

        解决方案是在序列化之前处理您的innerMessage,将[NSNull null] 的任何实例替换为@{}(或等效的[NSDictionary dictionary])。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-02
          • 1970-01-01
          • 1970-01-01
          • 2022-08-12
          • 2018-07-04
          • 2014-12-31
          • 1970-01-01
          相关资源
          最近更新 更多