我有一个关于使用try/except语句在Python中迭代JSON文件的最佳实践问题。
我有一个类似以下的JSON文件(对于这个问题非常简化):
"results": [
{
"listingId":"1"
"address":"123 Main st"
"landsize":"190 m2"
},
{
"listingId":"2"
"address":"345 North st"
"state":"California"
}
]
正如我所说的,这是非常简单的,(在我的实际问题中,我感兴趣的键值对大约有30个,记录数以千计)挑战是,即使键非常一致(总是在相同的30个左右),偶尔也会有一个键/值对丢失。
for i in range(len(JSON_data["results"])):
try:
print "ListingID=" + JSON_data["results"][i]["listingId"]
except KeyError:
print "ListingID is unknown"
try:
print "Address=" + JSON_data["results"][i]["address"]
except KeyError:
print "Address is unknown"
try:
print "landsize=" + JSON_data["results"][i]["landsize"]
except KeyError:
print "landsize is unknown"
try:
print "state =" + JSON_data["results"][i]["state"]
except KeyError:
print "state is unknown"
您可以使用dict.get()
方法来避免捕获异常:
listing_id = JSON_data["results"][i].get("listingId")
它返回none
或其他默认值,作为第二个参数传入。您还可以先检查密钥是否存在:
if 'listingId' in JSON_data["results"][i]:
# the key is present, do something with the value
接下来,在这里不要使用range()
。您最好直接在results
列表上循环,这样每次都可以直接引用字典,而不使用整个json_data[“results”][i]
前缀:
for nesteddict in JSON_data["results"]:
if 'listingId' in nesteddict:
listing_id = nesteddict['nesteddict']
expected_keys = ['listingId', 'address', 'landsize', ...]
for nesteddict in JSON_data["results"]:
for key in expected_keys:
if key not in nesteddict:
print(key, 'is unknown')
else:
value = nesteddict[key]
print('{} = {}'.format(key, value)
# note, using a set here now
expected_keys = {'listingId', 'address', 'landsize', ...}
for nesteddict in JSON_data["results"]:
for key in nesteddict.keys() & expected_keys: # get the intersection
# each key is guaranteed to be in nesteddict
value = nesteddict[key]
print('{} = {}'.format(
问题内容: 有没有更好的方法来执行以下操作: 看起来很讨厌,我不想这样做: 保持最高效率。 问题答案: 也许您可以尝试这样的事情: 您可以这样称呼它: 这将尝试按它们在列表中的顺序调用这些方法。如果您想传递任何参数,可以像下面这样在列表之后传递它们:
问题内容: python中有没有办法将try / except变成一行? 就像是… 哪里是声明的变量,而不是…所以会引发错误并变成… 问题答案: 在Python中无法将/块压缩到一行上。 另外,不知道变量是否像在其他动态语言中一样,在Python中是否存在也是一件坏事。比较安全的方法(和流行的样式)是将所有变量设置为某种值。如果他们可能就不会置,将其设置为第一(或或或如果它是更适用的东西。) 如果
问题内容: 这是将python“ with”语句与try-except块结合使用的正确方法吗? 如果是这样,请考虑使用旧的处理方式: 这里的“ with”语句的主要好处是我们可以摆脱三行代码吗? 对于这个用例,这 似乎并不吸引我(尽管我知道“ with”语句还有其他用途)。 编辑:以上两个代码块的功能是否相同? EDIT2:前几个答案大体上谈及使用“ with”的好处,但是这里似乎没有什么好处。我
问题内容: 我正在尝试遍历JSON对象以导入数据,即标题和链接。我似乎无法掌握过去的内容。 JSON: 我尝试使用字典: 此代码仅在之前打印信息。( 忽略贾斯汀·比伯的曲目 :) 问题答案: 您加载JSON数据有些脆弱。代替: 您实际上应该这样做: 您不应该将“ JSON对象”视为什么。您所拥有的是清单。该列表包含两个字典。字典包含各种键/值对,所有字符串。当您这样做时,您将要求列表中的第一个字典
问题内容: 我有一个需要迭代的JSON文件,如下所示… 数据中的键并不总是相同的(我只是使用示例,有20个不同的键),因此,我无法设置脚本来静态引用它们以获取值。 否则我可以说 过去我在数据节点上使用了一个简单的foreach循环… 但是不想阻止脚本。有任何想法吗? 问题答案: 您可以通过以下方式遍历JavaScript对象: myobject可能是您的json.data
问题内容: 我正在尝试遍历json文件并获取所需的详细信息,这是我的json 我的java代码 如您在代码中所看到的,我正在导入json文件并尝试获取下一个元素并从中打印组件,我还应该同时打印标头,行列式和行列式值。谢谢 问题答案: 您没有数组-您拥有名称为“ 000”等的 属性 。数组如下所示: 请注意,-表示JSON数组。 您可以遍历using 的属性: 要么: