【问题标题】:How to get exact value from raw json string using JQ如何使用 JQ 从原始 json 字符串中获取准确值
【发布时间】:2021-10-02 06:10:02
【问题描述】:

我正在从我的第 3 方 API 获取 Json 输出(jsonString 中缺少引号),我想解析输出并获取其中一个属性值。

下面是示例代码:

echo "Hello World!"
testValue='[{name: bhanu,dept:test}]'
echo " test value " $testValue
echo "$testValue" |  jq -r '.[0].name

出现以下错误:

解析错误:第 1 行第 8 列的文字无效

你能帮我解决一下吗?

【问题讨论】:

    标签: json jq


    【解决方案1】:

    这是正确的语法:

       echo '[{"name": "bhanu","dept":"test"}]' | jq  -r '.[0].name'
       bhanu
    

    在您的情况下(json 未字符串化),您可以使用 sed 的一些帮助:

      echo '[{name: bhanu,dept:test}]' | sed  's/[a-zA-Z]\+/"&"/g' | jq -r '.[0].name'
     bhanu
    

    【讨论】:

    • 感谢重播,但是当我收到来自 3rd pary API 的响应时,引号丢失了。示例响应:[{name: bhanu,dept:test}] 有没有办法使用 JQ 解析这个示例响应
    • 通过 sed 使用可能的选项更新了我的答案
    【解决方案2】:

    正如@R2D2 所指出的,如果您希望使用 jq,一种选择是修改 testValue 的值,使其成为有效的 JSON,例如手动或使用一些文本整理工具。

    您可能希望考虑其他两个选项:

    • 更改生成类似 JSON 的文本的内容,以便生成 JSON 或存在 JSON 转换器的 JSON 变体
    • 修改testValue的值,使其作为jq程序有效,例如
    testValue='[{name: "bhanu", dept: "test"}]'
    jq -rn "$testValue | .[0].name"
    

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2017-09-21
      • 2018-04-16
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多