Reputation: 1670
I have a JSON array that I'm cleaning up in Python. I want to remove the imageData
property:
data.json
[{"title": "foo", "imageData": "xyz123"},
{"title": "bar", "imageData": "abc123"},
{"title": "baz", "imageData": "def456"}]
I am setting up a list comprehension to remove the property, but I'm not sure how to create the variable that focuses on imageData
:
import json
with open('data.json') as json_data:
data = json.load(json_data)
clean_data = [ item for item in data if not item['imageData'] ]
# Write `clean_data` to new json file
When I print
the list comprehension, it returns an empty array. What do I have to correct to get this working properly?
Upvotes: 23
Views: 63928
Reputation: 33046
An easy solution to your problem is deleting the unwanted key in place, with del
:
import json
with open('data.json') as json_data:
data = json.load(json_data)
for element in data:
del element['imageData']
You should add some safety checks, but you get the idea.
Upvotes: 40
Reputation: 23753
How about:
clean_data = [k:v for k,v in data.iteritems() if k != 'imageData']
Or a dictionary expresion/comprehension if you want a dictionary:
clean_data = {k:v for k,v in data.iteritems() if k != 'imageData'}
Upvotes: 1
Reputation: 599560
If not all the elements have an imageData
key, then using del
will cause an KeyError
exception. You could guard against that by using pop
with a default:
for item in data:
item.pop('image', None)
Upvotes: 18
Reputation:
[ item for item in data if not item['imageData'] ]
is empty becaus all have imageData
. You are just testing for it, not removing it.
Loop over date
and del item['imageData']
on each item
.
Upvotes: 2