How to save json object variable based on specific value

Question:

I am trying to read json response from url in python. the below code works fine but the problem is i need to grab the key based on the subject say if subject is "Indices Daily level" then it should print the following key hkr1omlsnteodhkvnt98q20682ghv1fmegb8de01
enter image description here

import json, pandas as pd
import urllib

URL = "https://pv-ft-marketdata-store.ihsmvals-dev.com/email/search"
response = urllib.request.urlopen(URL)
text = response.read()
json_data = json.loads(text)
print(json_data)
Asked By: Rahul Vaidya

||

Answers:

print(next(d["key"] for d in json_data if d["subject"] == "Indices Daily Level"))
key = str(next(d["key"] for d in json_data if d["subject"] == "Indices Daily Level"))

URL = "https://pv-ft-marketdata-store.ihsmvals-dev.com/email/" + 'key'  "/data/html"
print(URL)
Answered By: Rahul Vaidya

To get first value which match some criteria from list we can pass generator expression which iterates over this list with condition straight into next() which will return first value from passed generator. As you’ve mentioned in this comment, in case if there are two or more values which matches condition you need to get one which has "latest processed time" which I assume stored in "processed" key of each JSON object in list and contains date in ISO format. To achieve that we can sort list (using list.sort()) in descending order by value of "processed" key (passing itemgetter() as key argument) before lookup. And finally you’ve mentioned that you need to use extracted "key" in next URL, so you need just concatenate it between two URL path parts you provided.

Code:

import json
from urllib.request import urlopen
from operator import itemgetter

with urlopen('https://pv-ft-marketdata-store.ihsmvals-dev.com/email/search') as resp:
    json_data = json.load(resp)
    
json_data.sort(key=itemgetter("processed"), reverse=True)
key = next(d["key"] for d in json_data if d["subject"] == "Indices Daily Level")

URL = "https://pv-ft-marketdata-store.ihsmvals-dev.com/email/" + key + "/data/html"
print(URL)
Answered By: Olvin Roght
import json
from urllib.request import urlopen
from operator import itemgetter
import pandas as pd
import requests
import re

with urlopen('https://pv-ft-marketdata-store.ihsmvals-dev.com/email/search') as resp:
    json_data = json.load(resp)

json_data.sort(key=itemgetter("processed"), reverse=True)
key = next(d["key"] for d in json_data
if d["subject"].startswith ("Morgan Stanley Systematic Strategies Daily Levels")

URL = "https://pv-ft-marketdata-store.ihsmvals-dev.com/email/" + key + "/data/html"
html = requests.get(URL).content
df_list = pd.read_html(html)
df = df_list[-1]
print(df)
Answered By: Rahul Vaidya
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.