Reputation: 93
I need to get the value of _ISSUE_CURRENCY
.
I have a JSON which is as below:
{
'#value': 'VR-GROUP PLC',
'_ISSUE_CURRENCY': 'EUR',
'_PRICING_MULTIPLIER': 1,
'_TYPE': 'Debt',
'_SETTLEMENT_CALENDAR_ID': 'Tgt',
'_SUBTYPE': 'Bond',
'_IS_UNIT_TRADED': 'N',
'_ISSUE_STATUS': 'Active',
'_OWNERSHIP_TYPE': 'Unknown',
'_ISSUE_METHOD': 'Unknown',
'_DENOMINATION_CURRENCY': 'EUR'
}
My code so far:
f_asset = open(f"{tempdir}\\cdwassets_all.csv").read().replace("\n", "")
json_obj_asset = json.loads(f_asset, strict=False)
try:
issue_cur = jmespath.search("validatedAsset.assetName", doc)
except:
issue_cur = ''
# currency.append(issue_cur)
print(issue_cur)
# output:
{'#value': 'VR-GROUP PLC', '_ISSUE_CURRENCY': 'EUR', '_PRICING_MULTIPLIER': 1, '_TYPE': 'Debt', '_SETTLEMENT_CALENDAR_ID': 'Tgt', '_SUBTYPE': 'Bond', '_IS_UNIT_TRADED': 'N', '_ISSUE_STATUS': 'Active', '_OWNERSHIP_TYPE': 'Unknown', '_ISSUE_METHOD': 'Unknown', '_DENOMINATION_CURRENCY': 'EUR'}
I tried to do it this way, but without success.
issue_cur = jmespath.search("validatedAsset.assetName", doc)["_ISSUE_CURRENCY"]
print(issue_cur)
# output
{'#value': 'VR-GROUP PLC', '_ISSUE_CURRENCY': 'EUR', '_PRICING_MULTIPLIER': 1, '_TYPE': 'Debt', '_SETTLEMENT_CALENDAR_ID': 'Tgt', '_SUBTYPE': 'Bond', '_IS_UNIT_TRADED': 'N', '_ISSUE_STATUS': 'Active', '_OWNERSHIP_TYPE': 'Unknown', '_ISSUE_METHOD': 'Unknown', '_DENOMINATION_CURRENCY': 'EUR'}
I need to verify that _ISSUE_CURRENCY
attribute exists.
Upvotes: 1
Views: 139
Reputation: 39129
You are stating:
I have a JSON which is as below
This is not a JSON, as described in the RFC 7159, describing what is a valid JavaScript Object Notation (JSON), the quotation mark that delimits strings is the character %x22
, so a double quote "
.reference
This should actually be raised by the json.loads
function call of your code already, the script:
import json
json_data = """
{
'validatedAsset': {
'assetName': {
'#value': 'VR-GROUP PLC',
'_ISSUE_CURRENCY': 'EUR',
'_PRICING_MULTIPLIER': 1,
'_TYPE': 'Debt',
'_SETTLEMENT_CALENDAR_ID': 'Tgt',
'_SUBTYPE': 'Bond',
'_IS_UNIT_TRADED': 'N',
'_ISSUE_STATUS': 'Active',
'_OWNERSHIP_TYPE': 'Unknown',
'_ISSUE_METHOD': 'Unknown',
'_DENOMINATION_CURRENCY': 'EUR'
}
}
}
"""
json.loads(json_data, strict=False)
Would raise:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 3 (char 5)
So, I am going to assume that what you are calling a valid JSON is the actual print of the json.loads
function, which is then a valid Python dictionary.
So, you just have to modify your JMESPath query to get the _ISSUE_CURRENCY
, and make it this query:
validatedAsset.assetName._ISSUE_CURRENCY
Which would give you EUR
as a result.
Given the code
import json
import jmespath
json_data = """
{
"validatedAsset": {
"assetName": {
"#value": "VR-GROUP PLC",
"_ISSUE_CURRENCY": "EUR",
"_PRICING_MULTIPLIER": 1,
"_TYPE": "Debt",
"_SETTLEMENT_CALENDAR_ID": "Tgt",
"_SUBTYPE": "Bond",
"_IS_UNIT_TRADED": "N",
"_ISSUE_STATUS": "Active",
"_OWNERSHIP_TYPE": "Unknown",
"_ISSUE_METHOD": "Unknown",
"_DENOMINATION_CURRENCY": "EUR"
}
}
}
"""
print(jmespath.search(
"validatedAsset.assetName._ISSUE_CURRENCY",
json.loads(json_data, strict=False)
))
This yields:
EUR
Upvotes: 1