解析逗号分隔列表的最佳方法

Posted

技术标签:

【中文标题】解析逗号分隔列表的最佳方法【英文标题】:Best way to parse comma separated list 【发布时间】:2014-03-21 22:38:35 【问题描述】:

我正在接收来自与我通信的服务器的 JSON 数据包,我返回的请求之一在 JSON 数组中有一个返回的项目,它是一个逗号分隔的字符串。

当我 NSLog 将 JSON 数据包作为数组记录时,它看起来像这样。

(
    "\"Completed\",\"UnCompleted Value\",\"Damaged Value\"",
    "",
    0
)

我可以像这样访问 JSON 数组的第一项

NSString *firstJSONString = [jsonArray objectAtIndex:0];

然后我想以最好/最有效的方式解析它,因为我要将值存储到 coredata 对象中。

所以我的问题是如何解析这个逗号分隔的字符串?

【问题讨论】:

引用的值可以有逗号吗? 是的......显然,如果引号内有类似的内容,它将在其周围加上引号。 然后对解析 CSV 文件进行一些搜索。您将需要做同样的事情 - 处理可能在值中的引号和逗号。 github上有一个流行的CSV parer。 这太奇怪了——有点像 JSON 数组在途中被盗了。您可以使用[] 包装字符串并通过 JSON 反序列化发送,但如果没有其他复杂情况,那么 componentsSeparatedByString 可能是最简单的。 好的,然后去查找 csv 解析器.. 谢谢 【参考方案1】:
NSArray *items = [firstJSONString componentsSeparatedByString:@","]; 

NSArray *items = [firstJSONString componentsSeparatedByString:@"\",\""];

然后从第一项中删除\",在最后一项中删除\"

【讨论】:

这仅适用于引用的值中不能包含逗号的情况。 @rmaddy 是正确的,因为这将是我的第一个解决方案。但是我忘了把它写进我的问题中。对此感到抱歉。 0 不是字符串的一部分——它是“真实”数组中的一个单独元素,最终的 "" 也是如此。 这样第二个例子会从字符串引号内删除所有引号?

以上是关于解析逗号分隔列表的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

解析以逗号分隔的std :: string [duplicate]

如何将逗号分隔的字符串解析为列表(警告)?

在 Java 中构建一串分隔项的最佳方法是啥?

在PHP中将字符串[基本上是逗号分隔的数字]转换为整数的最佳方法[重复]

正则表达式匹配逗号分隔的 key=value 列表,其中 value 可以包含逗号

Javascript:以逗号分隔的字符串搜索数字的最佳方式