how to filter json array in python
Question:
That is the current json array I have.
I want get all json objects that type=1
before filter:
[
{
"type": 1
"name" : "name 1",
},
{
"type": 2
"name" : "name 2",
},
{
"type": 1
"name" : "name 3"
},
]
after filter:
[
{
"type": 1
"name" : "name 1",
},
{
"type": 1
"name" : "name 3"
},
]
please help.
Answers:
The following snippet of code does exactly what you want, but BEWARE that your input (as written in the question) is not a valid json string, you can check here: http://jsonlint.com.
import json
input_json = """
[
{
"type": "1",
"name": "name 1"
},
{
"type": "2",
"name": "name 2"
},
{
"type": "1",
"name": "name 3"
}
]"""
# Transform json input to python objects
input_dict = json.loads(input_json)
# Filter python objects with list comprehensions
output_dict = [x for x in input_dict if x['type'] == '1']
# Transform python object back into json
output_json = json.dumps(output_dict)
# Show json
print output_json
The filter() method filters the given sequence with the help of a function that tests each element in the sequence to be true or not. Documentation for filter
>>> obj=[
... {
... "type": 1,
... "name": "name 1"
... },
... {
... "type": 2,
... "name": "name 2"
... },
... {
... "type": 1,
... "name": "name 3"
... }
... ]
>>> filter(lambda x: x['type'] == 1, obj)
<filter object at 0x7fd98805ca00>
>>> list(filter(lambda x: x['type'] == 1, obj))
[{'type': 1, 'name': 'name 1'}, {'type': 1, 'name': 'name 3'}]
>>> list(filter(lambda x: x['type'] == 2, obj))
[{'type': 2, 'name': 'name 2'}]
That is the current json array I have.
I want get all json objects that type=1
before filter:
[
{
"type": 1
"name" : "name 1",
},
{
"type": 2
"name" : "name 2",
},
{
"type": 1
"name" : "name 3"
},
]
after filter:
[
{
"type": 1
"name" : "name 1",
},
{
"type": 1
"name" : "name 3"
},
]
please help.
The following snippet of code does exactly what you want, but BEWARE that your input (as written in the question) is not a valid json string, you can check here: http://jsonlint.com.
import json
input_json = """
[
{
"type": "1",
"name": "name 1"
},
{
"type": "2",
"name": "name 2"
},
{
"type": "1",
"name": "name 3"
}
]"""
# Transform json input to python objects
input_dict = json.loads(input_json)
# Filter python objects with list comprehensions
output_dict = [x for x in input_dict if x['type'] == '1']
# Transform python object back into json
output_json = json.dumps(output_dict)
# Show json
print output_json
The filter() method filters the given sequence with the help of a function that tests each element in the sequence to be true or not. Documentation for filter
>>> obj=[
... {
... "type": 1,
... "name": "name 1"
... },
... {
... "type": 2,
... "name": "name 2"
... },
... {
... "type": 1,
... "name": "name 3"
... }
... ]
>>> filter(lambda x: x['type'] == 1, obj)
<filter object at 0x7fd98805ca00>
>>> list(filter(lambda x: x['type'] == 1, obj))
[{'type': 1, 'name': 'name 1'}, {'type': 1, 'name': 'name 3'}]
>>> list(filter(lambda x: x['type'] == 2, obj))
[{'type': 2, 'name': 'name 2'}]