【问题标题】:jq breaks reading encoded entities from valid JSON stringjq 中断从有效 JSON 字符串中读取编码实体
【发布时间】:2019-12-21 20:07:41
【问题描述】:

我正在使用 jq 遍历 JSON 文件,但在 json 值中出现 \u0022 时遇到问题。

jq -c  '.node[]' file.json | while read node; do

    description=$(jq -r '.description' <<< "$node");

    printf '%s\n' "$description";


done

这适用于所有值,但 jq 解码的值在遇到 \u0022 时会导致错误,因为它会转换为双引号。

所以对于值

{"description":"This is my \u0022real\u0022 name"}

jq 将出错:parse error: Invalid numeric literal

如何让jq 不解码实体或忽略或删除它们?

【问题讨论】:

    标签: bash sed jq


    【解决方案1】:

    首先;与其使用 Bash 迭代 JSON node 数组,不如将其完全卸载到 jq

    jq -r '.node[]|.description' file.json
    

    关于使用jq 解析包含双引号"$node Bash 变量时遇到的问题;是因为read 命令需要-r 选项,否则它将取消转义JSON 字符串中的双引号(删除反斜杠\),将其变成无效的JSON 字符串。

    #!/usr/bin/env bash
    
    jq -c  '.node[]' file.json | while read -r node; do
    echo "$node"
        description=$(jq -r '.description' <<< "$node");
        printf '%s\n' "$description";
    done
    

    如果.node[] 数组为空或不存在,此 Bash 脚本也会失败,因为jq 将解析一个空输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多