{
"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
。请帮忙。谢谢。
答案 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
用于扩展数组或对象有许多允许的缩写。似乎让你最困惑的两个是:
.[]
.foo.bar
{li> .foo | .bar
{foo}
另一个重要的缩写是:
{"foo": .foo}
代表E[]
,其中E是一个适当的紧凑表达考虑到这些原则和示例,您应该能够掌握jq文档中所述的详细信息。