Jeremyapple
Jeremyapple

Reputation: 263

How to remove quotes around a string in python?

I am trying to remove quotes for all the elements present in data["clonedRadarsdetailslist"] shown below.

  1. Quotes dont get removed

  2. 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

Answers (3)

Cillian Collins
Cillian Collins

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

Mateen Ulhaq
Mateen Ulhaq

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)

Run online

Upvotes: 4

Mohammed Abuiriban
Mohammed Abuiriban

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

Related Questions