【问题标题】:How to parse a JSON object? [closed]如何解析 JSON 对象? [关闭]
【发布时间】:2020-02-20 20:10:20
【问题描述】:

我知道有很多这样的问题,但我无法找到我的问题的答案。或者可能,我在这里遗漏了一些东西。我的 JSON 格式是:

{
    "fields": [
        {
            "type": "long",
            "name": "UniqId",
            "data": "True"
        },
        {
            "type": "string",
            "name": "Name",
            "data": "True"
        },
        {
            "type": "string",
            "name": "Address",
            "data": "False"
        }
    ],
    "type": "struct"
}

我只想提取 nametype 并将其附加到列表中。第一个元素是名称,第二个是类型。 上述格式保存在一个变量 json_dump 中。当我这样做时:

for k in json_dump1.iteritems():
    print k

它给了我一个错误

"AttributeError: 'str' 对象没有属性 'iteritems"。

非常感谢您的帮助。谢谢。

【问题讨论】:

  • 需要用到json解析库。
  • a) 你使用的是 Python 2 吗?它不再受支持,因此请尽可能升级。 b) 您需要使用json.loads() 反序列化字符串
  • 您的json_dump1 是一个字符串,它没有iteritems 作为属性。您需要使用 json 库解析字符串:import json parsed_json = json.loads(json_string)
  • 您从该错误消息中了解/不了解什么?另外,请分享minimal reproducible example
  • 这能回答你的问题吗? How to parse JSON in Python?

标签: python json parsing


【解决方案1】:

json_dump1是一个字符串,所以需要先解析成一个对象。这可以通过json library 来完成:

import json
parsed_json = json.loads(json_dump1)

听起来你也想对此做一些理解。目前尚不清楚您希望如何存储 nametype 值,但您希望这样的东西可以迭代 parsed_json

results = []
for f in parsed_json['fields']:
    results.append(f['name'])
    results.append(f['type'])

【讨论】:

  • 感谢您的帮助。我尝试了代码,但出现错误:TypeError: string indices must be integers, not str
  • @Jupyter 你能告诉我你试图运行什么代码吗?
  • 效果很好。我在定义时错过了列表。再次感谢
【解决方案2】:

对于这种情况,最好将 json 视为包含嵌套列表或字典的字典。因此,如果您这样对待它们并遍历列表/键,您应该没问题。在这种情况下,第一个键是fields,之后我们有许多列表,每个列表都包含一个字典,因此我们遍历每个列表并提取所需的键(nametype):

name_list = []
type_list = []
for i in json_file['fields']:
    name_list.append(i['name'])
    type_list.append(i['type'])
print name_list
print type_list

输出:

['UniqId', 'Name', 'Address']
['long', 'string', 'string']

您还可以创建一个字典,在其中添加这些值:

json_values = {'name':type_name,'list':type_list}

当然,您可以先定义它,然后将值附加到字典中的列表中:

json_values = {'name':[],'list':[]
name_list = []
type_list = []
for i in json_file['fields']:
    json_values['name'].append(i['name'])
    json_values['list'].append(i['type'])

【讨论】:

  • 感谢您的帮助。当我尝试时,它给了我错误:TypeError: string indices must be integers, not str
  • 我复制粘贴了您提供的内容。您是否编辑或更改了某些内容?
猜你喜欢
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2013-04-29
  • 2012-08-03
  • 1970-01-01
相关资源
最近更新 更多