【问题标题】:NSString: EOL and rangeOfString issuesNSString:EOL 和 rangeOfString 问题
【发布时间】:2010-06-10 21:13:15
【问题描述】:

如果我在这里遗漏了什么,请告诉我...我正在尝试从数据流中解析单个 JSON 对象。数据流缓冲在常规的 NSString 中,各个 JSON 对象由 EOL 标记描述。

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

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

【问题讨论】:

    标签: iphone nsstring eol


    【解决方案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 库即可。 '}' 后面很容易出现导致您观察到的问题的尾随空格。

    【讨论】:

    • 问题在于,只有当 json 对象中的值都不包含行尾标记时才有效。否则,您最终会将对象分开。问题是 '}' 出现在 ([dataBuffer rangeOfString:@"\n"].location - 2) 尽管没有空间。由于某种原因, \ 和 n 在比较中都被计为字符。我最终遍历了整个字符串并检查了每个单独的字符,但我仍然希望有更好的方法。
    • '{' 和 '}' 必须在 JSON 中平衡 - 所以你可以计算,如果不平衡,将以下数组视为流。检查它们以找出完成数据和追加/删除需要多少个数组,直到你只有一个正确的字符串数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多