【问题标题】:Invalid (non-string) key in JSON dictionaryJSON 字典中的无效(非字符串)键
【发布时间】:2012-10-10 08:40:37
【问题描述】:

最后一行总是抛出异常:“JSON 字典中的无效键”。 我不知道为什么。我可以打印“味精”字典。

NSDictionary* header = @{
@(udpVersion) : @"ver",
@(self.dataType) : @"type",
@(self.ack) : @"ack",
[WBUserMng sharedClient].getUserId : @"src",
};

NSDictionary* msg = @{
header:@"head",
self.payload:@"data",
};

NSError* error = nil;
return [NSJSONSerialization dataWithJSONObject:msg options:kNilOptions error:&error]

【问题讨论】:

    标签: objective-c json nsdictionary xcode4.5


    【解决方案1】:

    我认为您在字典文字的新 Objective C 语法中 keyvalue 的顺序错误。应该是

    NSDictionary* msg = @{
        @"head" : header,
        @"data" : self.payload
    };
    

    header 字典也是如此。

    【讨论】:

      【解决方案2】:

      我第一次看到@{} 或@(self.dataType) 指令。我不知道你如何编译它。 给我们更多提示。

      NSDictionary* dic = [NSDictionary dictionaryWithObject: @"a" forKey: @"b"];
      
      [NSJSONSerialization dataWithJSONObject: dic options: NSJSONWritingPrettyPrinted error: nil];
      

      NSString* jsonString =  @"{\"foo\": \"bar\", \"foo2\": \"bar2\"}";
      // no commat one the last JSON line
      [NSJSONSerialization dataWithJSONObject: jsonString options: NSJSONWritingPrettyPrinted error: nil];
      

      【讨论】:

      • xcode 4.5 带来的新特性。我真的正确编译了这个。所以我不认为这会是一个问题....
      • 好的,我刚刚发现了这个新功能。什么是 self.dataType / self.ack 签名?顺便说一句,如果您从 [WBUserMng sharedClient].getUserId 或任何对象中获得 null,则会引发异常。你应该总是得到一个非零键对象
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2014-06-04
      • 2016-11-25
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多