如何创建具有多个键的 NSDictionary?
Posted
技术标签:
【中文标题】如何创建具有多个键的 NSDictionary?【英文标题】:How to create an NSDictionary with multiple keys? 【发布时间】:2012-06-26 11:05:57 【问题描述】:我不确定我要问的实际上是不是带有多个键的NSDictionary
,但可以。
我想要做的是为我的数据创建一个带有键和值的NSDictionary
,然后将其转换为JSON
格式。 JSON
格式看起来就像这样:
"eventData":
"eventDate": "Jun 13, 2012 12:00:00 AM",
"eventLocation":
"latitude": 43.93838383,
"longitude": -3.46
,
"text": "hjhj",
"imageData": "raw data",
"imageFormat": "JPEG",
"expirationTime": 1339538400000
,
"type": "ELDIARIOMONTANES",
"title": "accIDENTE"
我只像这样使用过NSDictionaries
:
NSArray *keys = [NSArray arrayWithObjects:@"eventDate", @"eventLocation", @"latitude" nil];
NSArray *objects = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];
dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
但是上面的格式不全是key-value。
所以我的问题是 NSDictionary
将如何适应 JSON
格式?
感谢您阅读我的帖子,如有任何困惑,请见谅。
【问题讨论】:
【参考方案1】:您可以在另一个NSDictonary
中使用NSDictionary
:
NSDictionary *eventLocation = [NSDictionary dictionaryWithObjectsAndKeys:@"43.93838383",@"latitude",@"-3.46",@"latitude", nil];
NSMutableDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:eventLocation,@"eventLocation", nil];
[eventData setObject:@"Jun 13, 2012 12:00:00 AM" forKey:@"eventDate"];
[eventData setObject:@"hjhj" forKey:@"text"];
.
.
.
NSMutableDictionary *finalDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:eventData,@"eventData", nil];
[finalDictionary setObject:@"ELDIARIOMONTANES" forKey:@"type"];
[finalDictionary setObject:@"accIDENTE" forKey:@"title"];
【讨论】:
你在@"latitude" 和 nil 之间漏掉了一个逗号。【参考方案2】:现在有了 Objective-C 文字,有一种更好、更简单、更简洁的方式来实现这一点。这是您使用这种新语法的准确字典:
NSDictionary *dictionary = @
@"eventData": @
@"eventDate": @"Jun 13, 2012 12:00:00 AM",
@"eventLocation": @
@"latitude": @43.93838383,
@"longitude": @-3.46
,
@"text": @"hjhj",
@"imageData": @"raw data",
@"imageFormat": @"JPEG",
@"expirationTime": @1339538400000
,
@"type": @"ELDIARIOMONTANES",
@"title": @"accIDENTE"
;
// Prints: "43.93838383"
NSLog(@"%@", dictionary[@"eventData"][@"eventLocation"][@"latitude"]);
【讨论】:
【参考方案3】:如何使用 NSDictionary 创建 NSArray 和访问对象?
...创建 NSArray
NSArray *studentkeys = [NSArray arrayWithObjects:@"studentName", @"studentBirthDate", @"studentCity", @"studentMobile" nil];
NSArray *objects = [NSArray arrayWithObjects:@"Pravin", @"27/08/1990", @"Bhavnagar",@"7878007531", nil];
...使用 NSDictionary 访问 NSArray 对象
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
【讨论】:
【参考方案4】:结构如下:
您的根对象是 NSMutableDictionary
eventData
- 对象 NSMutableDictionary
的键和键:
->键eventDate
对象NSString
->key eventLocation
object NSMutableDictionary
带有键和对象:
---->键latitude
对象NSNumber
---->键longitude
对象NSNumber
-> 键text
对象NSString
-> 键imageData
对象NSString
后来转换为NSData
-> 键imageFormat
对象NSString
-> 键 expirationTime
对象 NSNumber
type
对象键 NSString
title
对象键 NSString
【讨论】:
看起来不错,但你能帮我了解一下 obj-c 语法吗?因为我对这个很陌生? 为了以后参考,使用graver结构,同时你可以使用我发布的代码。 @Jacky Boy 非常感谢您的回答。我认为grager的结构更具可读性和可理解性。编辑你的答案并在你的答案之后发布这个结构(我的意思是 obj 语法)是否容易两者兼而有之? @donparalias 我不认为这是非常“道德”的事情。 :) 为什么不呢?我的意思是你们中的任何人,我只是因为你们在这里才问你们。仅供日后参考!如果可以的话,我会接受这两个答案,但我当然非常感谢你们!【参考方案5】:如果你想要多个类别,你可以按照这个格式
NSDictionary *jsonObject = @
@"data1":@[
@
@"title":@"A"
@"subData" : @[
@
@"title":@"aa"
]
]
;
【讨论】:
如果你想使用 NSDictionary 管理多个分类,你可以按照这个格式来以上是关于如何创建具有多个键的 NSDictionary?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用包含Swift中相同键的多个值的查询参数构建URL?