Objective c 理解Json和NSData

Objective c 理解Json和NSData,objective-c,Objective C,我们必须创建一个Jason文件发送到服务器。 我发现这样做的方式是: NSDictionary* dic = @{@"Username" :userName, @"Firstname" :firstName, @"Lastname" : lastName, @"Email" : email,

我们必须创建一个Jason文件发送到服务器。 我发现这样做的方式是:

NSDictionary* dic = @{@"Username" :userName,
                          @"Firstname" :firstName,
                          @"Lastname" : lastName,
                          @"Email" : email,
                          @"Password" : pass,
      };
     NSData* json = [NSJSONSerialization dataWithJSONObject:dic options:0 error:nil];
我真的不明白为什么在创建了已经是Json文件的
dic
之后,我必须在创建
NSData
时使用
NSJSONSerialization
,为什么不直接将
dic
设置为
NSData
?这个序列化到底是做什么的?
另外,为什么不创建一个包含此结构的
NSString

dic是Objective-C字典(键值对的集合),与JSON无关。打印字典可能类似于JSON,但事实并非如此

NSJSONSerialization
从字典创建JSON数据。JSON是一种文本格式,有文档记录,例如:。字典的JSON数据如下所示:

{"Firstname":"John","Email":"jon@apple.com","Username":"john","Lastname":"Doe","Password":"topsecret"}
NSJSONSerialization
创建
NSData
而不是
NSString
只是该类作者的设计决策。可以使用以下命令将数据转换为字符串:

NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];

dic不是json数据,它是一个术语表。如果您必须像使用字典一样将数据发送到服务器,您可以使用一个简单的NSString对象将其作为UTF8字符发送。非常感谢。我明白。但是为什么字典一开始就像json一样使用@和{?为什么不直接用dic的键设置值,然后将其序列化为json?@Rant:
@{“Username”:Username,…}
是新的“Container Literal”语法(记录在这里:)。它看起来可能类似于json,但完全不相关。