将 NSData 转换为 NSDictionary

Posted

技术标签:

【中文标题】将 NSData 转换为 NSDictionary【英文标题】:Converting NSData into NSDictionary 【发布时间】:2011-08-18 14:58:23 【问题描述】:

我从 XML 文件中获取数据并将其存储在 NSData 对象中。我想将该 NSData 转换为 NSDictionary 并将该数据存储在 plist 中。

我的代码如下:

NSURL *url = [NSURL URLWithString:@"http://www.fubar.com/sample.xml"];
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    NSLog(@"%@", data);

为了转换数据,我使用的是:

- (NSDictionary *)downloadPlist:(NSString *)url 
    NSMutableURLRequest *request  = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10]; 
    NSURLResponse *resp = nil;
    NSError *err = nil;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&resp error:&err];

    if (!err) 
        NSString *errorDescription = nil;
        NSPropertyListFormat format;
        NSDictionary *samplePlist = [NSPropertyListSerialization propertyListFromData:responseData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&errorDescription];

        if (!errorDescription)
            return samplePlist;

        [errorDescription release];              
    

    return nil;

谁能告诉我怎么做?

【问题讨论】:

好吧,您需要读取 XML 文件并提取属于您的字典的 XML 元素。具体如何操作取决于 XML 文件的结构。 【参考方案1】:

或者这个:

NSString* dataStr  = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];   
SBJSON *jsonParser = [SBJSON new];
NSDictionary* result = (NSDictionary*)[jsonParser objectWithString:dataStr error:nil];
[jsonParser release];
[dataStr release];

【讨论】:

这仅适用于 JSON 数据,问题是关于 XML 数据。【参考方案2】:

试试这个代码:

NSString *newStr1 = [[NSString alloc] initWithData:theData1 encoding:NSUTF8StringEncoding];
NSString *newStr2 = [[NSString alloc] initWithData:theData2 encoding:NSUTF8StringEncoding];
NSString *newStr3 = [[NSString alloc] initWithData:theData3 encoding:NSUTF8StringEncoding];

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil];
NSArray *objects = [NSArray arrayWithObjects:newStr1 , newStr2 , newStr3 , nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

for (id key in dictionary) 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);


NSString *path = [[NSBundle mainBundle] pathForResource:@"Login" ofType:@"plist"]; 
[dictionary writeToFile:path  atomically:YES];
//here Login is the plist name.

愉快的编码

【讨论】:

以上是关于将 NSData 转换为 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据从 NSData 转换为 NSDictionary

使用 NSJSONSerialization 将 NSDictionary 转换为 NSData

在 NSDictionary 中传递 NSDate 并转换为 NSData 以进行 jsondata 修复

当我将 NSData 转换为 NSDictionary 时,在 iOS9 和 iOS8 上显示了一些不同的东西

使用 Swift 将 JSON 字符串转换为 NSDictionary

将 Plist (NSString) 解析为 NSDictionary