compare list of kwys with json keys and create new json
Question:
i have list of keys (am giving only 4 as example. it may be 100-1k keys]
['session_id','following_status','job_name','last_interaction']
Now, i get input json as below,
[
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc1",
"job_name": "blogger-following",
"target": "ghjk",
"liked": 21,
"watched": 8,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc2",
"job_name": "blogger-following",
"target": "name2",
"liked": 1,
"watched": 7,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc3",
"job_name": "blogger-following",
"target": "name3",
"liked": 67,
"watched": 78,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc4",
"job_name": "blogger-following",
"target": "name4",
"liked": 210,
"watched": 77,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc5",
"job_name": "blogger-following",
"target": "name5",
"liked": 21,
"watched": 790,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc6",
"job_name": "blogger-following",
"target": "name6",
"liked": 81,
"watched": 7,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
}
]
i need to iterate json and if matches the keys in the above list i need to get those key values and push to a new json file
i should create json by matching keys and if not matching ignore those key, values.
output will be,
[
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc1",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc2",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc3",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc4",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc5",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc6",
"job_name": "blogger-following"
}
]
what i tried,
import json
from datetime import datetime
from operator import itemgetter
with open("data.json", "r") as f_in:
data = json.load(f_in)
items = ["session_id", "following_status", "job_name", "last_interaction"]
i = itemgetter(*items)
out = [dict(zip(items, v)) for v in enumerate(data[0]['updated_data'].items())]
Even i tried this,
[{k: msgs[0]['updated_data'][k] for k in items if k in enumerate(msgs[0]['updated_data'].items())}]
Not worked
please suggest me how can i achieve.
Answers:
Apply the itemgetter i
respectively:
keys = ["session_id", "following_status", "job_name", "last_interaction"]
i = itemgetter(*keys)
out = [dict(zip(keys, i(d['updated_data']))) for d in data]
print(out)
[{'following_status': 'not followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc1'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc2'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc3'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc4'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc5'},
{'following_status': 'not followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc6'}]
i have list of keys (am giving only 4 as example. it may be 100-1k keys]
['session_id','following_status','job_name','last_interaction']
Now, i get input json as below,
[
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc1",
"job_name": "blogger-following",
"target": "ghjk",
"liked": 21,
"watched": 8,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc2",
"job_name": "blogger-following",
"target": "name2",
"liked": 1,
"watched": 7,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc3",
"job_name": "blogger-following",
"target": "name3",
"liked": 67,
"watched": 78,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc4",
"job_name": "blogger-following",
"target": "name4",
"liked": 210,
"watched": 77,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc5",
"job_name": "blogger-following",
"target": "name5",
"liked": 21,
"watched": 790,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
},
{
"updated_data": {
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc6",
"job_name": "blogger-following",
"target": "name6",
"liked": 81,
"watched": 7,
"commented": 0,
"followed": false,
"unfollowed": false,
"scraped": false,
"pm_sent": false
}
}
]
i need to iterate json and if matches the keys in the above list i need to get those key values and push to a new json file
i should create json by matching keys and if not matching ignore those key, values.
output will be,
[
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc1",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc2",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc3",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc4",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "followed",
"session_id": "abc5",
"job_name": "blogger-following"
},
{
"last_interaction": "2022-06-20 06:55:55.652434",
"following_status": "not followed",
"session_id": "abc6",
"job_name": "blogger-following"
}
]
what i tried,
import json
from datetime import datetime
from operator import itemgetter
with open("data.json", "r") as f_in:
data = json.load(f_in)
items = ["session_id", "following_status", "job_name", "last_interaction"]
i = itemgetter(*items)
out = [dict(zip(items, v)) for v in enumerate(data[0]['updated_data'].items())]
Even i tried this,
[{k: msgs[0]['updated_data'][k] for k in items if k in enumerate(msgs[0]['updated_data'].items())}]
Not worked
please suggest me how can i achieve.
Apply the itemgetter i
respectively:
keys = ["session_id", "following_status", "job_name", "last_interaction"]
i = itemgetter(*keys)
out = [dict(zip(keys, i(d['updated_data']))) for d in data]
print(out)
[{'following_status': 'not followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc1'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc2'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc3'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc4'},
{'following_status': 'followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc5'},
{'following_status': 'not followed',
'job_name': 'blogger-following',
'last_interaction': '2022-06-20 06:55:55.652434',
'session_id': 'abc6'}]