从 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

jqawksort:

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 ).