-1

I'm trying get all values where "_tradeIdScheme": "mhi:MUREX".

e.g. "#value": "37066751"

Part of JSON:

"trade": {
    "tradeHeader": {
        "partyTradeIdentifier": [{
            "tradeId": [{
                "#value": "5fbbc10b32a3adbcc7bb6fc0",
                "_tradeIdScheme": "mhi:trade-id",
                "_xsi:type": "TradeId"
            }, {
                "#value": "37066751",
                "_tradeIdScheme": "mhi:MUREX",
                "_xsi:type": "TradeId"
            }
        }]
}]

I am trying to do this, but it returns only one value, i need to get all values.

filepath = jsonEod + "\\" + "MHEUeodTrades.json" 
f_open = open(filepath).read().replace("\n", "")

json_obj = json.loads(f_open, strict=False)

for doc in json_obj:
    tradeId = jmespath.search( "trade.tradeHeader.partyTradeIdentifier[].tradeId[?_tradeIdScheme == 
   'mhi:MUREX']",doc,)
    list_mx.append(tradeId)


Does anyone know which part of my path is wrong?

Bruno Lorena
  • 73
  • 1
  • 9
  • 1
    Your JSON is just plain invalid. Trimming down a JSON for the brevity of the question is a good practice, but please, then [validate it](https://jsonlint.com/). – β.εηοιτ.βε Nov 24 '21 at 09:07

1 Answers1

0
for file in cdwEodTrades:  # i,
    filepath = jsonEod + "\\" + file  #
    f_open = open(filepath).read().replace("\n", "")

    json_obj = json.loads(f_open, strict=False)

for doc in json_obj:
    tradeId = jmespath.search("trade.tradeHeader.partyTradeIdentifier[]", doc)
    for i, x in enumerate(tradeId):  # iterate over number of partyTradeIdentifier
        mxId = jmespath.search(
            f"trade.tradeHeader.partyTradeIdentifier[{i}].tradeId[?_tradeIdScheme == 'mhi:MUREX']",
            doc,
        )[0]["#value"]
        list_mx.append(mxId)
)

list(set(list_mx))
Bruno Lorena
  • 73
  • 1
  • 9