我将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
答案 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;
}