Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中的json文件提取数据_Python_Json - Fatal编程技术网

从python中的json文件提取数据

从python中的json文件提取数据,python,json,Python,Json,我一直在努力寻找搜索特定值和提取数据的最佳方法。我是新来的,希望我的措辞正确 {"family": { "name": "Mary", "age": "32", "sex": "female", "kids": [ { "name": "jim", "age": "10", "sex": "male", "dob_year": "2007", "ssn": "123

我一直在努力寻找搜索特定值和提取数据的最佳方法。我是新来的,希望我的措辞正确

    {"family": {
    "name": "Mary",
    "age": "32",
    "sex": "female",
    "kids": [
      {
        "name": "jim",
        "age": "10",
        "sex": "male",
        "dob_year": "2007",
        "ssn": "123-23-1234"
      },
      {
        "name": "jill",
        "age": "6",
        "sex": "female",
        "dob_year": "2011",
        "ssn": "123-23-1235"
      }]}}

如果我需要搜索包含“1234”的“ssn”并返回“name”“jim”,那么实现这一点的最佳方法是什么

您可以首先迭代子对象并应用条件

import json
js = '''your json text data'''
j = json.loads(js)

for items in j['family']['kids']:
    if '1234' in items['ssn']:
        print(items['name'])
输出

'jim'

使用json包,如下所示

ans =     '{"family": {
    "name": "Mary",
    "age": "32",
    "sex": "female",
    "kids": [
      {
        "name": "jim",
        "age": "10",
        "sex": "male",
        "dob_year": "2007",
        "ssn": "123-23-1234"
      },
      {
        "name": "jill",
        "age": "6",
        "sex": "female",
        "dob_year": "2011",
        "ssn": "123-23-1235"
      }]}}'
temp = json.loads(ans)
for kid in  temp['family']['kids']:
     print kid['name'],kid['ssn']

希望这就是您想要的。

假设您将json文本加载到js变量中
kn=next((sj['name']表示js['family']['kids']if('1234'表示sj['ssn']),无)


如果找到条件,kn将为您提供名称,否则将为“无”。当然,你可以把条件变成变量。希望有帮助。

我更愿意提供一种处理这种情况的常用方法,即基于python函数编程的until方法,使用它,您可以找到您的目标(如果找不到,请提供默认值),并且您可以轻松地解耦筛选条件和候选项

json_str = """
{"family": {
    "name": "Mary",
    "age": "32",
    "sex": "female",
    "kids": [
      {
        "name": "jim",
        "age": "10",
        "sex": "male",
        "dob_year": "2007",
        "ssn": "123-23-1234"
      },
      {
        "name": "jill",
        "age": "6",
        "sex": "female",
        "dob_year": "2011",
        "ssn": "123-23-1235"
      }]}}
"""
将数据加载到python dict对象

import json
data = json.loads(json_str)
现在是截止部分:

def until(terminate, iterator, default=None):
    try:
        i = next(iterator)
        if terminate(i):
            return i
        return until(terminate, iterator, default)
    except StopIteration:
        return default


ssn_target = '1234'

target_kid = until(lambda kid: ssn_target in kid['ssn'], iter(data['family']['kids']))

if target_kid is not None:
    print(target_kid['name'])
else:
    print('Opps! not found')
注意:


Python对可以进行多少递归调用有一个相当小的限制(通常为1000次),因此iterable列表不应该太长。

实际上,问题是如何从文件中提取

给你:

import json

with open('data.json') as json_file:
    data = json.load(json_file)
    for kid in data['family']['kids']:
        if '1234' in kid['ssn']:
            print(kid['name'])

附加读取:

取决于文件大小、dict密钥是否动态更改等;只需加载json.loads即可获得dict并在以后继续比较?或者你能把你的代码片段粘贴到这里吗?这种方法非常有效,如果我有多个孩子都有“1234”并且想要有性别的名字列表,我该怎么做?