从 JSON 文件中提取字段,将其与纯文本文件匹配值进行比较,并从 JSON 文件中提取特定字段
To extract field from JSON file comparing it with plain text file matching values and extract specific field from JSON file
我有 file1.json
和纯文本 file2
,其中使用 file2
值与 file.json
与匹配值 file2
进行比较会有相应的file1.json
中的 CaseID 字段,结果文件应包含这些值。我在下面提到了预期结果的案例。
我尝试使用 awk 工具进行提取,但没有得到预期的答案
awk -F, 'FNR==NR {f2[];next} !([=12=] in f2)' file2 file1
file1.json
{
"Cases": [{
"CaseID": "100",
"CaseUpdatedByUser": "XYZ",
"Case": {
"CaseName": "Apple",
"ID": "1"
}
},
{
"CaseID": "350",
"CaseUpdatedByUser": "ABC",
"Case": {
"CaseName": "Mango",
"ID": "1"
}
},
{
"CaseID": "440",
"CaseUpdatedByUser": "PQR",
"Case": {
"CaseName": "Strawberry",
"ID": "1"
}
}
]
}
file2
Apple
Strawberry
Mango
预期输出:
100
350
440
与 jq
、awk
和 sort
:
jq -r '.Cases[] | "\(.Case.CaseName);\(.CaseID)"' file1 \
| awk -F ';' 'NR==FNR{array[]=; next} {print array[]}' - file2 \
| sort -n
输出:
100
350
440
如果您编写一个 extract.py
模块来帮助您获取所需的准确信息,那会怎么样。
该模块非常灵活,因此可以作为模块导入到任何项目中。
我试过一个复杂而长的 json 文件,它工作得很好。
本模块代码为:
#extract.py
def json_extract(obj, key):
arr = []
def extract(obj, arr, key):
if isinstance(obj, dict):
for k, v in obj.items():
if isinstance(v, (dict, list)):
extract(v, arr, key)
elif k == key:
arr.append(v)
elif isinstance(obj, list):
for item in obj:
extract(item, arr, key)
return arr
values = extract(obj, arr, key)
return values
为了进一步解释,这是 URL of the original post ( Extract Nested Data From Complex JSON ).
我有 file1.json
和纯文本 file2
,其中使用 file2
值与 file.json
与匹配值 file2
进行比较会有相应的file1.json
中的 CaseID 字段,结果文件应包含这些值。我在下面提到了预期结果的案例。
我尝试使用 awk 工具进行提取,但没有得到预期的答案
awk -F, 'FNR==NR {f2[];next} !([=12=] in f2)' file2 file1
file1.json
{
"Cases": [{
"CaseID": "100",
"CaseUpdatedByUser": "XYZ",
"Case": {
"CaseName": "Apple",
"ID": "1"
}
},
{
"CaseID": "350",
"CaseUpdatedByUser": "ABC",
"Case": {
"CaseName": "Mango",
"ID": "1"
}
},
{
"CaseID": "440",
"CaseUpdatedByUser": "PQR",
"Case": {
"CaseName": "Strawberry",
"ID": "1"
}
}
]
}
file2
Apple
Strawberry
Mango
预期输出:
100
350
440
与 jq
、awk
和 sort
:
jq -r '.Cases[] | "\(.Case.CaseName);\(.CaseID)"' file1 \
| awk -F ';' 'NR==FNR{array[]=; next} {print array[]}' - file2 \
| sort -n
输出:
100 350 440
如果您编写一个 extract.py
模块来帮助您获取所需的准确信息,那会怎么样。
该模块非常灵活,因此可以作为模块导入到任何项目中。
我试过一个复杂而长的 json 文件,它工作得很好。
本模块代码为:
#extract.py
def json_extract(obj, key):
arr = []
def extract(obj, arr, key):
if isinstance(obj, dict):
for k, v in obj.items():
if isinstance(v, (dict, list)):
extract(v, arr, key)
elif k == key:
arr.append(v)
elif isinstance(obj, list):
for item in obj:
extract(item, arr, key)
return arr
values = extract(obj, arr, key)
return values
为了进一步解释,这是 URL of the original post ( Extract Nested Data From Complex JSON ).