Как проанализировать объекты NSJsonDictionary в файле json, используя SBJson4StreamParser
Я новичок в iOS, я смог записать объекты NSDictionary в файл, как показано ниже
{
"msg":"Hello",
"from":"X",
"date":"12/1/2014"
}
{
"msg":"new to IOS",
"from":"home",
"date":"23/2/2014"
}
Я знаю, что это массив объектов, который мне нужно использовать с помощью NSArray, но я предотвратил это, поскольку мой один объект NSDictionary потребляет много памяти, я хотел сериализовать и десериализовать один объект за раз. Я сталкивался с SBJson4StreamParser, который внутренне выполняет такую функциональность, но я столкнулся с проблемами с реализацией, я также пытался с нативным NSJsonSeriailization, но варианты были ограничены для такого типа анализа, может кто-нибудь помочь с этим.
2 ответа
Здесь может помочь SBJson, прочитав файл по частям с помощью NSInputStream и вставив его в анализатор следующим образом:
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];
Обратите внимание, что вам все равно нужно прочитать и проанализировать весь файл, чтобы гарантировать, что вы найдете конкретную запись. Таким способом невозможно обработать только определенную запись.
Я хотел бы предложить другую возможность: предположим, что это сообщения вашего NSArray объекта словаря, тогда вы можете его сериализовать:
[[NSUserDefaults standardUserDefaults] setObject:self.messages forKey:@"com.yourdomain.messages"];
[[NSUserDefaults standardUserDefaults] synchronize];
и десериализовать
self.messages = [[NSUserDefaults standardUserDefaults] arrayForKey:@"com.yourdomain.messages"];
Рекомендации: Apple Doc
Я надеюсь это тебе поможет.