【问题标题】:Can a string without white space be considered a valid JSON?可以将没有空格的字符串视为有效的 JSON 吗?
【发布时间】:2021-09-12 10:36:26
【问题描述】:

我正在使用 JsonParser.parseString,如果我给出像“1234”或“abcd”这样的值(忽略大小写),它就会传递。谁能解释一下?

【问题讨论】:

    标签: json api rest validation parsing


    【解决方案1】:

    我正在使用 JsonParser.parseString,如果我给出像“1234”或“abcd”这样的值(忽略大小写),它就会传递。谁能解释一下?

    current specification for application/jsonRFC 8259

    生产规则的亮点:

    JSON-text = ws value ws
    value = false / null / true / object / array / number / string
    number = [ minus ] int [ frac ] [ exp ]
    int = zero / ( digit1-9 *DIGIT )
    
    string = quotation-mark *char quotation-mark
    quotation-mark = %x22      ; "
    

    因此:

    数字序列(例如:1234)是有效的 JSON 文本

    用双引号括起来的数字序列(例如:“1234”)是有效的 JSON 文本

    用双引号括起来的“未转义”字符序列(例如:“abcd”)是有效的 JSON 文本

    不带双引号的“未转义”字符序列(例如:abcd)不是有效的 JSON 文本。


    cat <<TEST | jq .
    "abcd"
    TEST
    
    "abcd"
    
    cat <<TEST | jq .
    abcd  
    TEST
    
    parse error: Invalid numeric literal at line 2, column 0
    

    【讨论】:

      【解决方案2】:

      您的第一个示例是数字的有效 JSON。使用 JavaScript 的解析器:

      console.log(JSON.parse('1234'));

      在我看来,JSON 解析器不太可能对您的第二个示例感到满意,因为它无效:

      console.log(JSON.parse('abcd'));

      ...除非它实际上有引号,在这种情况下,它是字符串的有效 JSON:

      console.log(JSON.parse('"abcd"'));

      但即使是对象也不必有空格,例如:

      console.log(JSON.parse('{"example":"object"}'));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-18
        • 2021-09-23
        • 1970-01-01
        • 2018-04-20
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        相关资源
        最近更新 更多