多行分割文本时解析错误

时间:2018-08-01 07:55:27

标签: jq

当我在多行上拆分文本行并使用命令“ jq。words.json”在屏幕上显示JSON文件时,我得到了parse error

一行文本值的JSON文件如下所示:

{
    "words" : "one two three four five"
}

命令“ jq。words.json”可以正常工作,并在屏幕上显示JSON文件。

但是当我在两行上分割“一二三四五”的值并运行相同的命令时,会出现解析错误

{
    "words" : "one two   
    three four five"
                   ^
}  
  

解析错误:无效的字符串:控制字符从U + 0000到   U + 001F必须在第3行第20列处转义

分析错误指向第三行末尾的“。

我该如何解决?

Tia, 安东尼

4 个答案:

答案 0 :(得分:1)

您必须在JSON中转义行的结尾:

{
  "words" : "one two\nthree four five"
}

答案 1 :(得分:1)

这是因为JSON格式无效。它应该看起来像这样:

{
    "words" : "one two \nthree four five"
}

答案 2 :(得分:1)

要将带有多行字符串的文本转换为有效的JSON,可以使用any-jsonhttps://www.npmjs.com/package/any-json),并将其通过管道传输到jq:

$ any-json --input-format=cson split-string.txt
{
    "words": "one two three four five"
}
$ any-json --input-format=cson split-string.txt | jq length
1

有关处理几乎JSON文本的更多信息,请参见jq常见问题解答:https://github.com/stedolan/jq/wiki/FAQ#processing-not-quite-valid-json

答案 3 :(得分:0)

分析错误指向第三行末尾的"

jq标记此错误的方式可能是违反直觉的,但是JSON中的错误之前指示的引号。

如果错误不是显而易见的,则可能是前一个键或值上缺少结尾引号。在这种情况下,与条件U+0000 through U+001F匹配的值可以是U+000A,它是line feed中的ASCII字符。

对于此问题,有意插入换行符。但是,这是invalid JSON