2010-06-10 59 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