我有点不确定手指的确切位置(当然不是我自己)

  • JSON是YAML 1.2的子集
    http://www.yaml.org/spec/1.2/spec.html
    “每个JSON文件也是有效的YAML文件”
  • JSON可以将制表符作为“无关紧要的空格”-包括制表符
    http://www.ietf.org/rfc/rfc4627.txt
    “允许使用无关紧要的空格...”
  • YAML不允许使用制表符进行缩进
    http://www.yaml.org/spec/1.2/spec.html
    “不得在缩进中使用制表符”

  • 因此,使用我的YAML解析器来处理以下JSON
    {
    \t"result" : "success",
    }
    

    注意:\ t仅用于可视化,输入中包含真实的制表符。

    出现错误“不允许使用制表符缩进”
    但是,“每个JSON文件也是有效的YAML文件”规则如何成立;因为我的文件是有效的JSON?

    由于制表符是没有意义的,我应该只执行预处理步骤以剥离所有制表符吗?由于字符串中唯一允许使用的空格是'space'-因此,只需删除文件中的所有制表符就可以了。

    最佳答案

    出现错误“不允许使用制表符缩进”
    它不是。

    这是Spec中的relevant production:

    [140]   c-flow-mapping(n,c) ::= “{” s-separate(n,c)?
                                    ns-s-flow-map-entries(n,in-flow(c))? “}”
    
    s-separate(n,c)解析为s-separate-lines(n) here(因为我们不在block-keyflow-key之内)。跳过一些步骤,我们到达s-separate-in-line,它允许使用制表符。

    底线是JSON中的此制表符不是缩进。缩进仅与块样式相关(即不分别对序列和映射使用[{)。在Flow样式中,空格仅用于分隔。

    编辑:删除示例链接,因为它有些误导。

    编辑2:要回答第二个问题:不,请不要删除制表符。它们可能满足标量的要求!请参见this example,其中表格实际上确定了块标量的缩进。

    关于json - 使用YAML分析器处理JSON;抛出制表符空白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40072485/

    10-13 06:30