当前位置: 首页 > 知识库问答 >
问题:

使用Python中的try语句遍历相对一致的JSON文件

松正阳
2023-03-14

我有一个关于使用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"

共有1个答案

柳坚白
2023-03-14

您可以使用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 的属性: 要么: