使用 Jmespath 按 JSON 中的部分字符串匹配过滤
Filter by partial string match in JSON using Jmespath
下面是一个示例 JSON:
{
"School": [
{"@id": "ABC_1",
"SchoolType": {"@tc": "10023204",
"#text": "BLUE FOX"}},
{"@id": "ABC_2",
"SchoolType": {"@tc": "143", "#text": "AN EAGLE"}},
{"@id": "ABC_3",
"SchoolType": {"@tc": "21474836", "#text": "OTHER REASONS"},
"SchoolStatus": {"@tc": "21474836", "#text": "FINE"},
"Teacher": [
{"@id": "XYZ_1",
"TeacherType": {"@tc": "5", "#text": "GENDER"},
"Gender": "FEMALE",
"Extension": {"@VC": "23",
"Extension_Teacher": {"DateDuration": {"@tc": "10023111",
"#text": "0-6 MONTHS"}}}},
{"@id": "XYZ_2",
"TeacherType": {"@tc": "23", "#text": "EDUCATED"},
"Extension": {"@VC": "23",
"Extension_Teacher": {"DateDuration": {"@tc": "10023111",
"#text": "CURRENT"}}}}]},
{"@id": "ABC_4",
"SchoolType": {"@tc": "21474836", "#text": "OTHER DAYS"},
"SchoolStatus": {"@tc": "1", "#text": "DOING OKAY"},
"Extension": {"Extension_School": {"AdditionalDetails": "CHRISTMAS DAY"}}}]
}
我想为每个 Teacher
@id
提取 Teacher
信息(TeacherType
、Gender
等),其中关联 SchoolType.\"#text\"
包含所有 School
@id
的“OTHER”。
我尝试了以下查询,但它不起作用:
School[?SchoolType.\"#text\".contains(@, "OTHER")].Teacher[*].TeacherType.\"#text\"[]]
非常感谢任何帮助。
您必须以这种方式围绕您的条件数组扭曲 contains
函数:
[?contains(SchoolType."#text", 'OTHER')]
所以获取完整 Teacher
对象的方法是:
School[?contains(SchoolType."#text", 'OTHER')].Teacher
或者,用 flatten operator:
删除数组中的数组
School[?contains(SchoolType."#text", 'OTHER')].Teacher | []
这将得到:
[
{
"@id": "XYZ_1",
"TeacherType": {
"@tc": "5",
"#text": "GENDER"
},
"Gender": "FEMALE",
"Extension": {
"@VC": "23",
"Extension_Teacher": {
"DateDuration": {
"@tc": "10023111",
"#text": "0-6 MONTHS"
}
}
}
},
{
"@id": "XYZ_2",
"TeacherType": {
"@tc": "23",
"#text": "EDUCATED"
},
"Extension": {
"@VC": "23",
"Extension_Teacher": {
"DateDuration": {
"@tc": "10023111",
"#text": "CURRENT"
}
}
}
}
]
下面是一个示例 JSON:
{
"School": [
{"@id": "ABC_1",
"SchoolType": {"@tc": "10023204",
"#text": "BLUE FOX"}},
{"@id": "ABC_2",
"SchoolType": {"@tc": "143", "#text": "AN EAGLE"}},
{"@id": "ABC_3",
"SchoolType": {"@tc": "21474836", "#text": "OTHER REASONS"},
"SchoolStatus": {"@tc": "21474836", "#text": "FINE"},
"Teacher": [
{"@id": "XYZ_1",
"TeacherType": {"@tc": "5", "#text": "GENDER"},
"Gender": "FEMALE",
"Extension": {"@VC": "23",
"Extension_Teacher": {"DateDuration": {"@tc": "10023111",
"#text": "0-6 MONTHS"}}}},
{"@id": "XYZ_2",
"TeacherType": {"@tc": "23", "#text": "EDUCATED"},
"Extension": {"@VC": "23",
"Extension_Teacher": {"DateDuration": {"@tc": "10023111",
"#text": "CURRENT"}}}}]},
{"@id": "ABC_4",
"SchoolType": {"@tc": "21474836", "#text": "OTHER DAYS"},
"SchoolStatus": {"@tc": "1", "#text": "DOING OKAY"},
"Extension": {"Extension_School": {"AdditionalDetails": "CHRISTMAS DAY"}}}]
}
我想为每个 Teacher
@id
提取 Teacher
信息(TeacherType
、Gender
等),其中关联 SchoolType.\"#text\"
包含所有 School
@id
的“OTHER”。
我尝试了以下查询,但它不起作用:
School[?SchoolType.\"#text\".contains(@, "OTHER")].Teacher[*].TeacherType.\"#text\"[]]
非常感谢任何帮助。
您必须以这种方式围绕您的条件数组扭曲 contains
函数:
[?contains(SchoolType."#text", 'OTHER')]
所以获取完整 Teacher
对象的方法是:
School[?contains(SchoolType."#text", 'OTHER')].Teacher
或者,用 flatten operator:
删除数组中的数组School[?contains(SchoolType."#text", 'OTHER')].Teacher | []
这将得到:
[
{
"@id": "XYZ_1",
"TeacherType": {
"@tc": "5",
"#text": "GENDER"
},
"Gender": "FEMALE",
"Extension": {
"@VC": "23",
"Extension_Teacher": {
"DateDuration": {
"@tc": "10023111",
"#text": "0-6 MONTHS"
}
}
}
},
{
"@id": "XYZ_2",
"TeacherType": {
"@tc": "23",
"#text": "EDUCATED"
},
"Extension": {
"@VC": "23",
"Extension_Teacher": {
"DateDuration": {
"@tc": "10023111",
"#text": "CURRENT"
}
}
}
}
]