I have a dictionary Like that:
{"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}
how can I Extract first_name
, last_name
, id
and phone
Values from this Dictionary?
CodePudding user response:
import json
# I have assumed your dictionary like that
data = {"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}
# The data in "message" need to be loaded on JSON format to access it.
data["message"] = json.loads(data["message"])
# Now, you can print or whatever you want with all the data
print(data["message"]["id"])
print(data["message"]["first_name"])
print(data["message"]["last_name"])
print(data["message"]["phone"]) # There is phone info both in data["message"]["phone"] and data["phone"]. They are identical. You can use whichever you want.
# Optional
# If you want, you can assign data["message"] to a variable.
finalData = data["message"]
# Then you can access the info that you need from finalData
print(finalData["first_name"])
CodePudding user response:
You should turn the string into a dictionary using e.g. json.loads
. Then extract like from a normal nested dictionary.
Example:
import json
message = mydict["message"]
message_dict = json.loads(message)
message_dict['id']
where mydict
is your given input dictionary.
In case your snippet shows the content of a file, you could do the following:
with open(filepath) as file:
mydict = json.load(file)
message_dict = mydict["message"]
message_dict['id']
CodePudding user response:
tried your problem, below code solved your issue:
` import json str1 = r'{"message":"{"":"user","pFlags":{"contact":true},"flags":2175,"id":379951860,"access_hash":"6967195540985199805","first_name":"پژوا","last_name":"روزبهی","username":"mramtd2","phone":"989157145632","photo":{"":"userProfilePhoto","photo_id":"1631880813210609625","photo_small":{"":"fileLocation","dc_id":4,"volume_id":"448413446","local_id":476387,"secret":"655623158723369503"},"photo_big":{"":"fileLocation","dc_id":4,"volume_id":"448413446","local_id":476389,"secret":"13993366131879811943"}},"status":{"_":"userStatusOffline","was_online":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}'
print(json.loads(json.loads(str1)['message'])['first_name'])
print(json.loads(json.loads(str1)['message'])['last_name'])
print(json.loads(json.loads(str1)['message'])['id'])
print(json.loads(json.loads(str1)['message'])['phone'])`
CodePudding user response:
Also, assuming your file has new line delimited dictionaries, using below code solved the issue:
import json
fo = open(r"C:\Users\Downloads\test.txt", "r")
for each_line in fo.readlines():
print(json.loads(json.loads(each_line)['message'])['first_name'])
print(json.loads(json.loads(each_line)['message'])['last_name'])
print(json.loads(json.loads(each_line)['message'])['id'])
print(json.loads(json.loads(each_line)['message'])['phone'])
CodePudding user response:
This is another way to do it:
import json
D = {"message":"{\"_\":\"user\",\"pFlags\":{\"contact\":true},\"flags\":2175,\"id\":379951860,\"access_hash\":\"6967195540985199805\",\"first_name\":\"پژوا\",\"last_name\":\"روزبهی\",\"username\":\"mramtd2\",\"phone\":\"989157145632\",\"photo\":{\"_\":\"userProfilePhoto\",\"photo_id\":\"1631880813210609625\",\"photo_small\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476387,\"secret\":\"655623158723369503\"},\"photo_big\":{\"_\":\"fileLocation\",\"dc_id\":4,\"volume_id\":\"448413446\",\"local_id\":476389,\"secret\":\"13993366131879811943\"}},\"status\":{\"_\":\"userStatusOffline\",\"was_online\":1558046876}}","phone":"989157145632","@version":"1","typ":"telegram_contacts","access_hash":"6967195540985199805","id":379951860,"@timestamp":"2020-01-26T13:50:12.793Z","path":"/home/user/mirror_01/users_5d65f610ec18aa615a5f580c.log","username":"mramtd2","type":"redis","flags":2175,"host":"ubuntu","imported_from":"telegram_contacts"}
data = json.loads(D['message'])
for key in ['first_name', 'last_name', 'phone', 'id']:
print(f'{key} -> {data.get(key, "?")}')