2010-06-10 56 views
1

有人可以告诉我,如果我在这里失去了一些东西......我试图从数据流中解析单个JSON对象。数据流在常规NSString中缓冲,单个JSON对象由EOL标记划定。NSString:EOL和rangeOfString问题

if([dataBuffer rangeOfString:@"\n"].location != NSNotFound) { 
    NSString *tmp = [dataBuffer stringByReplacingOccurrencesOfString:@"\n" withString:@"NEWLINE"]; 
    NSLog(@"%@", tmp); 
} 

上面的代码输出“...} NEWLINE {...”,如预期的那样。但是,如果我将上面的if语句中的@“\ n”更改为@“} \ n”,我什么也得不到。

回答

1

你为什么不使用 - (NSArray *)componentsSeparatedByString:(NSString *)separator?你可以给它一个@"\n"的分隔符,结果将是一个方便的字符串数组,代表你的个人JSON字符串,然后你可以迭代。

if([dataBuffer rangeOfString:@"\n"].location != NSNotFound) { 
    NSArray* JSONstrings = [dataBuffer componentsSeparatedByString:@"\n"]; 

    for(NSString* oneString in JSONstrings) 
    { 
     // here's where you process individual JSON strings 
    } 
} 

如果你搞不清终止'}',你可能会使JSON数据无效。把它分解并传递给JSON库。 '}'之后可能会很容易出现尾随空间,导致您正在观察的问题。

+0

问题是只有当json对象中的值都不包含行尾标记时才起作用。否则,你最终会拆分对象。 问题是,'}'出现在([dataBuffer rangeOfString:@“\ n”]。location - 2)尽管没有空间。出于某种原因,\和n在比较中分别被计为字符。我最终遍历整个字符串并检查每个单独的字符,但我仍然希望有更好的方法。 – carloe 2010-06-11 01:49:43

+0

'{'和'}'必须在JSON中平衡 - 因此您可以计数,如果不平衡,则将下列数组视为流。检查它们以查找需要多少个数组才能完成数据并追加/删除,直到只有一组正确的字符串。 – 2010-06-11 02:36:47