Please consider the following JSON extract (the data is much larger but this is a shorter piece of it i'm trying to get to work)
jsonData = """{
"products" : {
"DQ578CGN99KG6ECF" : {
"sku" : "DQ578CGN99KG6ECF",
"productFamily" : "Compute",
"attributes" : {
"location" : "US East (N. Virginia)",
"instanceType" : "hs1.8xlarge",
"tenancy" : "Shared",
"operatingSystem" : "Windows",
"licenseModel" : "License Included",
"preInstalledSw" : "NA"
}
},
"G2N9F3PVUVK8ZTGP" : {
"sku" : "G2N9F3PVUVK8ZTGP",
"productFamily" : "Instance",
"attributes" : {
"location" : "Asia Pacific (Seoul)",
"instanceType" : "i2.xlarge",
"tenancy" : "Host",
"operatingSystem" : "Windows",
"licenseModel" : "License Included",
"preInstalledSw" : "SQL Server Enterprise"
}
},
"FBZZ2TKXWWY5HZRX" : {
"sku" : "FBZZ2TKXWWY5HZRX",
"productFamily" : "Compute",
"attributes" : {
"location" : "Asia Pacific (Seoul)",
"instanceType" : "i2.4xlarge",
"tenancy" : "Dedicated",
"operatingSystem" : "SUSE",
"licenseModel" : "No License required",
"preInstalledSw" : "NA"
}
}
}
}"""
I'm not able to create a proper filter to find say all products with "Windows" as operatingSystem and tenancy shared.
I got to this point:
priceJson = json.loads(jsonData)
query = "products.*.attributes[?operatingSystem=='Windows' && tenancy=='Shared']"
output_dict = jmespath.search(query, priceJson)
however i loose the sku # this way.
Result:
[{
"location" : "US East (N. Virginia)",
"instanceType" : "hs1.8xlarge",
"tenancy" : "Shared",
"operatingSystem" : "Windows",
"licenseModel" : "License Included",
"preInstalledSw" : "NA"
}]
What i'd like to get:
[
{ "sku": "DQ578CGN99KG6ECF",
"attributes" : {
"location" : "US East (N. Virginia)",
"instanceType" : "hs1.8xlarge",
"tenancy" : "Shared",
"operatingSystem" : "Windows",
"licenseModel" : "License Included",
"preInstalledSw" : "NA"
}
}]
Any idea how to get to that result ?