将JSON写入文件。但你怎么读它呢?

时间:2011-12-12 11:19:03

标签: iphone objective-c ios xcode

我将JSON写入我的文件:

NSData *jsonData = [[CJSONSerializer serializer] serializeObject:dictionary error:&error];
[jsonData writeToURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@",
NSTemporaryDirectory(), @"file.json"]] atomically:YES];

但我怎么读回来?

我尝试将文件加载到NSData中,并转换为NSDictionary,如此

    // uses toll-free bridging for data into CFDataRef and CFPropertyList into NSDictionary
CFPropertyListRef plist =  CFPropertyListCreateFromXMLData(kCFAllocatorDefault, (CFDataRef)data,
                                                           kCFPropertyListImmutable,
                                                           NULL);
// we check if it is the correct type and only return it if it is
if ([(id)plist isKindOfClass:[NSDictionary class]])
{
    return [(NSDictionary *)plist autorelease];
}
else
{
    // clean up ref
    CFRelease(plist);
    return nil;
}

但它崩溃了因为我认为NSData不是一个plist。

CJSONSerializer是否有方法从文件中提取数据并帮我将其转换为字典?

谢谢, -code

3 个答案:

答案 0 :(得分:2)

使用序列化程序将对象转换为JSON,并使用 de 序列化程序转换为相反的方向。事实上,TouchJSON有一个CJSONDeserializer类:

[[CJSONDeserializer deserializer] deserialize:data error:NULL];

答案 1 :(得分:1)

您需要使用CJSONDeserializer进行解析,CJSONSerializer仅用于生成JSON。

答案 2 :(得分:0)

您可以使用NSJSONSerialization将JSON文件读取到NSData,然后也转换为nsdictionary。

-(NSDictionary*)dictionaryWithContentsOfJSONString:(NSString*)fileLocation
{

   NSString *filePath = [[NSBundle mainBundle] pathForResource:[fileLocation stringByDeletingPathExtension] ofType:[fileLocation pathExtension]];
   NSData* data = [NSData dataWithContentsOfFile:filePath];
   __autoreleasing NSError* error = nil;
   id result = [NSJSONSerialization JSONObjectWithData:data
                                            options:kNilOptions error:&error];
   if (error != nil) return nil;
   return result;

}