Dart解析带注释的JSON 如何避免值内注释符号被误识别
带注释JSON的正确处理方案
- 不要尝试用正则直接全局过滤注释
这种做法必然会误伤字符串值内部的注释符号,比如URL里的//、文本内容里的/*/*/都会被误删,导致JSON结构损坏、值内容缺失。 - 优先使用支持JSON注释的专用解析库
这类库会严格按照JSON语法规则区分字符串区域和注释区域,只会删除合法的注释内容,不会改动字符串内部的任何字符:- Python生态可选择
json5、demjson库 - JavaScript生态可选择
json5、jsonc-parser库
- Python生态可选择
- 如需自行实现注释剥离逻辑,必须先做区域区分
逐字符遍历JSON文本,先标记所有被双引号包裹的字符串范围(注意还要处理转义双引号\"的情况),仅删除非字符串区域内的//行注释、/* */块注释即可。
针对你给出的示例:
{ /* this is an explanation for something */ "linkToSomething": "https://something.net" // this is a link to something }
用上述方案处理后会得到完全合法的标准JSON,且不会破坏https://something.net里的//内容:
{ "linkToSomething": "https://something.net" }
注意:不要使用网上流传的通用正则注释清理脚本,几乎所有脚本都没有考虑转义双引号、字符串嵌套符号的场景,极易引发解析错误
内容的提问来源于stack exchange,提问作者puaaaal
相关产品推荐
相关产品推荐

