从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”并且想要有性别的名字列表,我该怎么做?