Как проанализировать объекты 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

Я надеюсь это тебе поможет.

Другие вопросы по тегам