【问题标题】:Python: Getting "TypeError" during checking whether a json key exist or not?Python:在检查 json 键是否存在时出现“TypeError”?
【发布时间】:2017-12-09 21:47:05
【问题描述】:

下面是我正在处理的json文件的一小部分。

  {
      'kind': 'c',
      'items': [
        {
          'kind': 'c',
          'title': 'D',
          'htmlTitle': 'P',
          'link': 'h',
          'pagemap': {
            'hcard': [
              {
                'fn': 'A',
                'title': 'S'
              }
            ],
            'person': [
              {
                'org': 't',

              }
            ],
            'cse_image': [
              {
                'src': 'h'
              }
            ]
          }
        }
      ]
    }

因为有些物品有个人钥匙,而有些没有。因此,为了检查项目是否包含人员密钥,我使用以下代码:

json = json.dumps(results)
for profile in range (0, 10):
    if 'person' not in json['items'][profile]['pagemap']:
        org="null"
    else:
        org= results['items'][profile]['pagemap']['person'][0]['org']
        #results stores the json response.

但是在运行程序时它会给出一个错误提示“TypeError:字符串索引必须是整数”。

【问题讨论】:

  • 你为什么打电话给json.dumps
  • 您的json 变量是一个字符串...您希望json['items'] 做什么???
  • 当我使用 reesults 而不是 json 如果 'person' 不在结果中['items'][profile]['pagemap']:我得到 KeyError org = results['items' ][profile]['pagemap']['person'][0]['org'] KeyError: 'org'
  • 你已经到了org。那挺好的。现在打印results['items'][profile]['pagemap']['person'][0]你就会知道问题了
  • 在使用 json.loads 时出现错误:TypeError: JSON 对象必须是 str、bytes 或 bytearray,而不是 'dict'

标签: python json python-3.x


【解决方案1】:

您将变量名称(如 json)和结果混合在一起,这令人困惑。所以我根据需要重新命名以实现您可能真正想要的。

这个例子中的 json 文件是“test.json”,因为我不知道你的 json 文件名。

我把打印行留在里面,这样你就可以看到发生了什么。您可以在测试时删除它们。

with open('test.json') as r:
    dic = json.load(r)

result = []

for profile in range(len(dic['items'])):
    print('profile:', profile)
    print('pagemap:', dic['items'][profile]['pagemap'])

    if 'person' not in dic['items'][profile]['pagemap']:
        org = "null"
    else:
        org = dic['items'][profile]['pagemap']['person'][0]['org']

    print('org:', org)
    result += [org]

print('result:', result)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多