Improperly formatted json?

Question:

First, I am new to Python and working with JSON.
I am trying to extract just one value from an API request response, and I am having a difficult time parsing out the data I need.
I have done a lot of searching on how to do this, but most all the examples use a string or file that is formatted is much more basic than what I am getting.
I understand the key – value pair concept but I am unsure how to reference the key-value I want. I think it has something to do with the response having multiple objects having the same kay names. Or maybe the first line "Bookmark" is making things goofy.
The value I want is for the model name in the response example below.
That’s all I need from this. Any help would be greatly appreciated.

{
  "Bookmark": "<B><P><p>SerNum</p><p>Item</p></P><D><f>false</f><f>false</f></D><F><v>1101666</v><v>ADDMASTER IJ7102-23E</v></F><L><v>123456</v><v>Model Name</v></L></B>",
  "Items": [
    [
      {
        "Name": "SerNum",
        "Value": "123456"
      },
      {
        "Name": "Item",
        "Value": "Model Name"
      },
      {
        "Name": "_ItemId",
        "Value": "PBT=[unit] unt.DT=[2021-07-28 08:20:33.513] unt.ID=[eae2621d-3e9f-4515-9763-55e67f65fae6]"
      }
    ]
  ],
  "Message": "Success",
  "MessageCode": 0
}
Asked By: Greg

||

Answers:

If you want to find value of dictionary with key 'Name' and value 'Item' you can do:

import json

with open('your_data.json', 'r') as f_in:
    data = json.load(f_in)

model_name = next((i['Value'] for lst in data['Items'] for i in lst if i['Name'] == 'Item'), 'Model name not found.')
print(model_name)

Prints:

Model Name

Note: if the dictionary is not found string 'Model name not found.' is returned

Answered By: Andrej Kesely

First, load the JSON into a python dict:

import json

x = '''{
  "Bookmark": "<B><P><p>SerNum</p><p>Item</p></P><D><f>false</f><f>false</f></D><F><v>1101666</v><v>ADDMASTER IJ7102-23E</v></F><L><v>123456</v><v>Model Name</v></L></B>",
  "Items": [
    [
      {
        "Name": "SerNum",
        "Value": "123456"
      },
      {
        "Name": "Item",
        "Value": "Model Name"
      },
      {
        "Name": "_ItemId",
        "Value": "PBT=[unit] unt.DT=[2021-07-28 08:20:33.513] unt.ID=[eae2621d-3e9f-4515-9763-55e67f65fae6]"
      }
    ]
  ],
  "Message": "Success",
  "MessageCode": 0
}'''

# parse x:
y = json.loads(x)

# The result is a Python dictionary. 

Now if you want the value ‘Model Name’, you would do:

print(y['Items'][0][1]['Value'])
Answered By: radhadman
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.