Reputation: 263
I am trying to remove quotes for all the elements present in data["clonedRadarsdetailslist"]
shown below.
Quotes dont get removed
Not all the elements are present after the script is executed probably because I am overwriting
import datetime
data = {
'orgRadar': u'37125110',
'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953),
'clonedRadarsdetailslist': [
"{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}",
"{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}",
],
}
print data
for radardetails in data['clonedRadarsdetailslist']:
radardetails = radardetails.strip('\"')
data['clonedRadarsdetailslist'] = radardetails
print data
CURRENT RESULT:
{'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': "{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"}
EXPECTED RESULT:
{'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': [{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}, {'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}]}
Upvotes: 3
Views: 12099
Reputation: 728
You have a key:value JSON 'dictionary' which needs to be converted to a series of arrays in order to loop through the values. You need to use the JSON.loads()
function to accomplish this. I'm not 100% sure what values you want, nor did I change your code to suit any specific values other than what was in the other code as I'm not sure what you want, but this should convert the JSON data to a superarray which can then be looped through:
import datetime
data = {'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': ["{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}", "{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"]}
json = json.loads(data)
for radardetails in json['clonedRadarsdetailslist']:
radardetails = radardetails.strip('\"')
data['clonedRadarsdetailslist'] = radardetails
print json
Should work, not sure what you're actually looking to get from it but you need to convert the JSON to a series of arrays and then loop through them to get the necessary values.
EDIT: Really sorry for jumping the gun and assuming I knew what was happening. You have a dictionary which is not what I initially thought you had. Here is a solution which will give you several arrays of information, you can pull whatever information you'd like from here:
import datetime
data = {'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': ["{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}", "{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"]}
list = []
for key, value in data.items():
temp = [key,value]
list.append(temp)
for item in list:
print (item)
EDIT 2: Just refined the code to better suit your needs, it will now (I hope) serve the function you wanted:
import datetime
import ast
data = {'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': ["{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}", "{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"]}
list = []
radarlist = []
for key, value in data.items():
temp = [key,value]
list.append(temp)
radar = ast.literal_eval(list[2][1][0])
for key, value in radar.items():
temp = [key,value]
radarlist.append(temp)
for item in radarlist:
print(item)
Upvotes: 2
Reputation: 27201
The error you receive tells you that single quotes are not valid. You may replace them with double quotes before attempting to load:
>>> [json.loads(x.replace("'", '"')) for x in data['clonedRadarsdetailslist']]
[{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'},
{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}]
Also, it's a bad idea to mutate the container that you're looping over. Don't do that!
EDIT: A "full solution", as requested.
import datetime
import json
data = {
'orgRadar': u'37125110',
'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953),
'clonedRadarsdetailslist': [
"{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}",
"{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"
]}
data['clonedRadarsdetailslist'] = [json.loads(x.replace("'", '"'))
for x in data['clonedRadarsdetailslist']]
print(data)
Upvotes: 4
Reputation: 510
What about using eval
like here:
import datetime, json
data = {'orgRadar': u'37125110', 'created_on': datetime.datetime(2018, 5, 10, 22, 48, 46, 979953), 'clonedRadarsdetailslist': ["{'clonedRadar': 40145048, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}", "{'clonedRadar': 40145054, 'clonedStatus': 'PASS', 'clonedRadarFinalStatus': 'PASS', 'updatedFailedReason': 'N/A', 'clonedRadarFinalStatusReason': 'N/A', 'updateStatus': 'PASS', 'clonedStatusfailReason': 'N/A'}"]}
data['clonedRadarsdetailslist'] = eval(data['clonedRadarsdetailslist'][0])
print data
Upvotes: 0