如何用jq解析这个文件?
How to parse this file with jq?
我刚开始使用 jq 和 json 文件,我正在尝试解析特定文件。
我正在尝试在命令行中使用 jq 来完成它,但是如果有任何其他方法可以正确地完成它,我会试一试。
文件本身如下所示:
{
"Status": "ok",
"Code": 200,
"Message": "",
"Result": [
{
"ID": 123456,
"Activity": 27,
"Name": Example1",
"Coordinate": {
"Galaxy": 1,
"System": 22,
"Position": 3
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 111111,
"Name": "foo",
"Rank": 4
},
"Alliance": null
},
{
"ID": 223344,
"Activity": 17,
"Name": "Example2",
"Coordinate": {
"Galaxy": 3,
"System": 44,
"Position": 5
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"StrongPlayer": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 765432,
"Name": "Player 2",
"Rank": 3
},
"Alliance": null
},
(...)
]
}
我需要根据 galaxy/system/position 提取信息。
例如,在脚本中包含适当的过滤器并执行类似的操作:
./parser --galaxy=1 --system=22 --position=3
它会给我:
ID : 123456
Name : Example1
Activity : 27
...
我尝试使用 curl 获取我的 json 文件并使用 jq 解析我的文件,但我不知道如何提出这种请求。
以下应该足以让您上路。
首先,假设 JSON 在文件名 galaxy.json 中;其次,假设文件 galaxy.jq 包含以下内容:
.Result[]
| select(.Coordinate | (.Galaxy==$galaxy and .System==$system and .Position==$position))
然后调用:
jq -f so-galaxy.jq --argjson galaxy 1 --argjson system 22 --argjson position 3 galaxy.json
会产生相应的对象:
{
"ID": 123456,
"Activity": 27,
"Name": "Example1",
"Coordinate": {
"Galaxy": 1,
"System": 22,
"Position": 3
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 111111,
"Name": "foo",
"Rank": 4
},
"Alliance": null
}
键:值格式
如果您希望输出为 key: value
格式,只需将 -r 添加到命令行选项,并将以下内容附加到 jq 过滤器:
| to_entries[]
| "\(.key): \(.value)"
输出
ID: 123456
Activity: 27
Name: Example1
Coordinate: {"Galaxy":1,"System":22,"Position":3}
Administrator: false
Inactive: false
Vacation: false
HonorableTarget: false
Debris: {"Metal":0,"Crystal":0,"RecyclersNeeded":0}
Moon: null
Player: {"ID":111111,"Name":"foo","Rank":4}
Alliance: null
我刚开始使用 jq 和 json 文件,我正在尝试解析特定文件。 我正在尝试在命令行中使用 jq 来完成它,但是如果有任何其他方法可以正确地完成它,我会试一试。
文件本身如下所示:
{
"Status": "ok",
"Code": 200,
"Message": "",
"Result": [
{
"ID": 123456,
"Activity": 27,
"Name": Example1",
"Coordinate": {
"Galaxy": 1,
"System": 22,
"Position": 3
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 111111,
"Name": "foo",
"Rank": 4
},
"Alliance": null
},
{
"ID": 223344,
"Activity": 17,
"Name": "Example2",
"Coordinate": {
"Galaxy": 3,
"System": 44,
"Position": 5
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"StrongPlayer": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 765432,
"Name": "Player 2",
"Rank": 3
},
"Alliance": null
},
(...)
]
}
我需要根据 galaxy/system/position 提取信息。 例如,在脚本中包含适当的过滤器并执行类似的操作:
./parser --galaxy=1 --system=22 --position=3
它会给我:
ID : 123456
Name : Example1
Activity : 27
...
我尝试使用 curl 获取我的 json 文件并使用 jq 解析我的文件,但我不知道如何提出这种请求。
以下应该足以让您上路。
首先,假设 JSON 在文件名 galaxy.json 中;其次,假设文件 galaxy.jq 包含以下内容:
.Result[]
| select(.Coordinate | (.Galaxy==$galaxy and .System==$system and .Position==$position))
然后调用:
jq -f so-galaxy.jq --argjson galaxy 1 --argjson system 22 --argjson position 3 galaxy.json
会产生相应的对象:
{
"ID": 123456,
"Activity": 27,
"Name": "Example1",
"Coordinate": {
"Galaxy": 1,
"System": 22,
"Position": 3
},
"Administrator": false,
"Inactive": false,
"Vacation": false,
"HonorableTarget": false,
"Debris": {
"Metal": 0,
"Crystal": 0,
"RecyclersNeeded": 0
},
"Moon": null,
"Player": {
"ID": 111111,
"Name": "foo",
"Rank": 4
},
"Alliance": null
}
键:值格式
如果您希望输出为 key: value
格式,只需将 -r 添加到命令行选项,并将以下内容附加到 jq 过滤器:
| to_entries[]
| "\(.key): \(.value)"
输出
ID: 123456
Activity: 27
Name: Example1
Coordinate: {"Galaxy":1,"System":22,"Position":3}
Administrator: false
Inactive: false
Vacation: false
HonorableTarget: false
Debris: {"Metal":0,"Crystal":0,"RecyclersNeeded":0}
Moon: null
Player: {"ID":111111,"Name":"foo","Rank":4}
Alliance: null