python3读取一个json文件,其中的行中缺少对象

2024-05-17 12:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取一个结构如下的json文件:

    [{"id":1,"gender":"Male","first_name":"Andrew","last_name":"Scott","email":"ascott0@shutterfly.com","ville":"Connecticut"},
{"id":3,"first_name":"Mary","last_name":"Richards","email":"mrichards2@japanpost.jp","ville":"Minnesota"}]

所以,正如你在第二行看到的,字段“gender”不存在,我意识到,因为我读取文件的代码在这一行出错了。在

我的代码:

^{pr2}$

我得到了错误:-在

C:/xxxxx/x.py
1 Male
Traceback (most recent call last):
2 Female
File "C:/xxxxx/x", line 67, in <module>
jsonreader()
File "C:/xxxxx/x", line 56, in jsonreader
print(line["id"],line["gender"])
KeyError: 'gender'

在回答伙计们之前,你应该知道我有一个方法来定义“gender”中的默认值,瞧,我的方法是:

def definegender(x):
    if x is None:
        x = 'unknown'
        return x
    elif (x =='Male') or (x=='Female'):#not None:
        return {
         'Male':'M',
         'Female': 'F'
        }.get(x)
    else:
        return x

因此,在本例中,我不能使用默认值之类的方法来读取值,因为我需要向我的方法发送一些值。在

你们中的一些人会知道,当我们丢失对象时,最好的方法就是读取这种文件。谢谢


Tags: 文件方法代码nameidreturnemailline
3条回答

为什么不用if语句来简化呢?在

for line in data:
    if "gender" in line:
        print(line)

虽然这已经有了一个完美的答案,但我的观点是,也可以有其他选择。这里是:

for line in data:
    try:
        print(line["id"],line["gender"])
    except KeyError:
        print(line["id"],"Error!!! no gender!")

这叫做错误处理。阅读以下文档: https://docs.python.org/3.6/tutorial/errors.html


更新:你是这个意思吗? 更新2已纠正的错误

^{pr2}$

更新3:(供将来使用)

默认情况下,get()将返回最简单的解决方案

gender = definegender(line.get("gender"))
print(line["id"],gender)

为什么不在dict.get中为字典使用默认值?在

print(line["id"],line.get("gender","unknown"))

由于您想进一步转换输入,可以将两个dict.get嵌套在一起,第一个以None作为默认值,以及一个新的表,如下所示:

^{pr2}$

(请注意,您不再需要复杂的性别转换方法)

相关问题 更多 >