jq,何时使用点而不是

时间:2018-03-21 04:46:36

标签: jq

考虑the following json string

{
  "data": {
    "search": {
      "repositoryCount": 24,
      "edges": [
        {
          "node": {
            "name": "leumi-leumicard-bank-data-scraper",
            "url": "https://github.com/Urigo/leumi-leumicard-bank-data-scraper",
            "description": "Open bank data for Leumi bank and Leumi card credit card",
            . . . 
        },
        {
          "node": {
            "name": "puppeteer-demo",
            "url": "https://github.com/xJkit/puppeteer-demo",
            "description": "A demo for website scrapping by my puppet :>",
            . . . 

如果要使用jq来选择data,那么它需要一个点(.)。即:

jq 'data' 
jq: error: data/0 is not defined at <top-level>, line 1:
data
jq: 1 compile error

但是jq '.data'工作正常,所选数据变为:

{
  "search": {
    "repositoryCount": 24,
    "edges": [
      {
      ...

如果要使用jq在管道之后选择search,那么需要一个点({{1}在它之前。即:

.

然而$ jq '.data | {.search} ' jq: error: syntax error, unexpected FIELD (Unix shell quoting issues?) at <top-level>, line 1: .data | {.search} jq: 1 compile error 工作正常。

此外,一个更复杂的例子,

jq '.data.search'

工作正常,但

jq '.data.search.edges[] | {node} '

给出:

jq '.data.search.edges[] | {node.name} '

所以,总而言之,在使用jq: error: syntax error, unexpected FIELD, expecting '}' (Unix shell quoting issues?) at <top-level>, line 1: .data.search.edges[] | {node.name} jq: 1 compile error 时,我很困惑何时使用点(.),何时不使用jq。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

如果你开始考虑所涉及的完整数据管道,并且识别表达式只是一个缩写形式,那么事情会更清楚。

在构建一个未缩写的管道时,关于“点”的基本原则非常简单:

  • filename = 'sam.csv' data_date = pd.read_csv(filename) column_name = data_date.ix[:, data_date.loc[0] == "temp"] column_work = column_name.iloc[1:] column_some = column_work.iloc[:,0] default_date = datetime.combine(date.today(), datetime.min.time()).replace(day=1) for line in column_some: print(parse(line[0], default=default_date).strftime("%d-%b-%y")) 指的是输入
  • .用于访问键“foo”
  • 的值
  • .foo用于扩展数组或对象

有许多允许的缩写。似乎让你最困惑的两个是:

    {li> .[] .foo.bar {li> .foo | .bar {foo}

另一个重要的缩写是:

  • {"foo": .foo}代表E[],其中E是一个适当的紧凑表达

考虑到这些原则和示例,您应该能够掌握jq文档中所述的详细信息。