如何在python中过滤json数组

时间:2014-11-28 13:36:05

标签: python json

这是我当前的json数组。 我想得到所有类型= 1

的json对象 过滤前

[ 
        {
            "type": 1
            "name" : "name 1",
        }, 
        {
            "type": 2
            "name" : "name 2",
        }, 
        {
            "type": 1
            "name" : "name 3"
        }, 
]
过滤后

[ 
        {
            "type": 1
            "name" : "name 1",
        }, 
        {
            "type": 1
            "name" : "name 3"
        }, 
]

请帮忙。

3 个答案:

答案 0 :(得分:24)

以下代码片段完全符合您的要求,但请注意您的输入(如问题中所述)不是有效的json字符串,您可以在此处查看: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

答案 1 :(得分:3)

简单地

print [obj for obj in dict if(obj['type'] == 1)] 

示例Link

答案 2 :(得分:0)

filter() 方法在一个函数的帮助下过滤给定的序列,该函数测试序列中的每个元素是否为真。 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'}]