如何使用SBJson4StreamParser解析json文件中的NSJsonDictionary对象

时间:2014-12-08 13:42:01

标签: ios objective-c json sbjson

我是iOS的新手,我能够将NSDictionary对象写入文件,如下例

{
"msg":"Hello",
"from":"X",
"date":"12/1/2014"
}
{
"msg":"new to IOS",
"from":"home",
"date":"23/2/2014"
}

我知道这是一个我需要使用NSArray的对象数组,但我已经阻止了,因为我的一个NSDictionary对象消耗了大量内存,我想一次序列化和反序列化一个对象。我遇到SBJson4StreamParser内部执行此类功能,但我遇到了实现问题,我也尝试使用原生NSJsonSeriailzation但是这些类型的解析选项有限,任何人都可以帮忙解决这个问题。

2 个答案:

答案 0 :(得分:0)

我建议另一种可能性:让我们假设你的NSArray是字典对象的消息,然后你可以序列化它:

[[NSUserDefaults standardUserDefaults] setObject:self.messages forKey:@"com.yourdomain.messages"];
[[NSUserDefaults standardUserDefaults] synchronize];

和反序列化

self.messages = [[NSUserDefaults standardUserDefaults] arrayForKey:@"com.yourdomain.messages"];

参考文献:Apple doc

我希望这可以帮到你。

答案 1 :(得分:0)

SBJson可以在这里帮助,通过使用NSInputStream以chunkwise方式读取文件并将其提供给解析器,如下所示:

id parser = [SBJson4Parser multiRootParserWithBlock:block
                                       errorHandler:eh];

id is = [NSInputStream inputStreamWithFileAtPath:filePath];
[is open];

// Buffer to read from the input stream
uint8_t buf[1024];

// Read from input stream until empty, or an error;
// better error handling is left as an exercise for the reader
while (0 > [is read:buffer maxLength: sizeof buffer]) {
    SBJson4ParserStatus status = [parser parse:data];
    NSLog(@"Status: %u",status);
    // Handle parser errors here
}
[is close];

请注意,您仍然需要阅读并解析整个文件以保证 你找到一个特定的条目。 没有办法只处理一个 以这种方式具体进入。