程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号?

开发过程中遇到使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号的问题如何解决?下面主要结合日常开发的经验,给出你关于使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号的解决方法建议,希望对你解决使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号有所启发或帮助;

“-”用于jq中的否定。对于带有特殊字符(例如“-”)的键名,不能使用简化的“ .keyname”语法。有多种选择,但最可靠的方法就是使用表单.["KEY name"],当链接时,可以将其缩写为[“ KEY name”],例如.a["b-c"]的简写形式.a | .["b-c"]

如有疑问,请显式使用管道。

有关更多信息,请查阅jq手册和/或https://github.com/stedolan/jq/wiki/FAQ

解决方法

我有一个JSON数据文件(如下所示),我正在尝试使用jq实用程序查找字段值。

除键名中包含-短划线字符的字段外,其他方法都可以正常工作。

如何获取(至少使用)下元素的“ field-2 ”,“ field-three 3 ”或“ field-three.url
”值?content.book1``jq

我尝试了以下操作来获取值,但是对于键名中包含短划线的字段,它给了我以下错误-。我试图反斜杠-字符,但这也无济于事。

发现错误类型:

jq: error (at <stdin>:27): null (null) and number (2) cannot be subtracted
jq: 1 compile error

jq: error: three/0 is not defined at <top-level>

jq: error: syntax error,unexpected INVALID_CHARACTER,expecting $end (Unix shell quoting issues?) at <top-level>

jq: error: syntax error,expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>,line 1:

命令:

$ cat /tmp/my.data.json
{
  "pages": {
    "book1": [
      "page1","page2-para1","page3-para1-sentence1","page3-para2-sentence3-word4"
    ]
  },"content": {
    "book1": {
      "name": "giga","url": "-","field1": "value1","field-2": "value-2","field-three": {
        "name": "THIRD","url": "book1/field-three/","short-url": "book1/field-three/chota-chetan"
      },"authur": {
        "name": "lori CHUCK","displayIndex": 4
      },"route": "/in-gc/hindi-chini-bhai-bhai"
    }
  }
}

$ cat /tmp/my.data.json| jq ".pages"
{
  "book1": [
    "page1","page3-para2-sentence3-word4"
  ]
}

$ cat /tmp/my.data.json| jq ".pages.book1[0]"
"page1"

$ cat /tmp/my.data.json| jq ".pages.book1[1]"
"page2-para1"

$ cat /tmp/my.data.json| jq ".content"
{
  "book1": {
    "name": "giga","field-three": {
      "name": "THIRD","url": "book1/field-three/"
    },"authur": {
      "name": "lori CHUCK","displayIndex": 4
    },"route": "/in-gc/hindi-chini-bhai-bhai"
  }
}

$ cat /tmp/my.data.json| jq ".content.book1"
{
  "name": "giga","field-three": {
    "name": "THIRD","url": "book1/field-three/"
  },"authur": {
    "name": "lori CHUCK","displayIndex": 4
  },"route": "/in-gc/hindi-chini-bhai-bhai"
}

$ cat /tmp/my.data.json| jq ".content.book1.name"
"giga"

$ cat /tmp/my.data.json| jq ".content.book1.field1"
"value1"

$ cat /tmp/my.data.json| jq ".content.book1.field-2"
jq: error (at <stdin>:27): null (null) and number (2) cannot be subtracted

$ cat /tmp/my.data.json| jq ".content.book1.field-three"
jq: error: three/0 is not defined at <top-level>,line 1:
.content.book1.field-three
jq: 1 compile error

$ cat /tmp/my.data.json| jq ".content.book1.field-three.url"
jq: error: three/0 is not defined at <top-level>,line 1:
.content.book1.field-three.url
jq: 1 compile error

$ cat /tmp/my.data.json| jq ".content.book1.field\-2"       
jq: error: syntax error,expecting $end (Unix shell quoting issues?) at <top-level>,line 1:
.content.book1.field\-2                    
jq: 1 compile error

$ cat /tmp/my.data.json| jq ".content.book1.field\\-2"
jq: error: syntax error,line 1:
.content.book1.field\-2                    
jq: 1 compile error

$ cat /tmp/my.data.json| jq ".content.book1.'field-2'"
jq: error: syntax error,line 1:
.content.book1.'field-2'               
jq: 1 compile error

$ cat /tmp/my.data.json| jq ".content.book1.authur"
{
  "name": "lori CHUCK","displayIndex": 4
}

$ cat /tmp/my.data.json| jq ".content.book1.route"
"/in-gc/hindi-chini-bhai-bhai"

$

PS: 我已经知道了,egrep所以这不是我想要的。

cat /tmp/my.data.json| jq ".content.book1"|egrep "short-url|field-2"
  "field-2": "value-2","short-url": "book1/field-three/chota-chetan"

有人真的在这里做得很好:https://jqplay.org/

大佬总结

以上是大佬教程为你收集整理的使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号全部内容,希望文章能够帮你解决使用JQ工具实用程序解析或查看JSON数据字段,其中字段名称的键名称中带有“-”破折号所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: