使用python访问json中的值
我有一个JSON字符串,如下所示使用python访问json中的值,python,json,Python,Json,我有一个JSON字符串,如下所示 typ_json="{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}" 我想从端口和端口访问值 我尝试了print(typ_json['FromPort']) 但我得
typ_json="{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}"
我想从端口和端口访问值
我尝试了print(typ_json['FromPort'])
但我得到了一个错误:
TypeError:列表索引必须是整数或片,而不是str
您需要将json
转换为dictionary
import json
data = json.loads(typ_json)
print(data['FromPort'])
有时json
可能会给出一些错误。在这种情况下,您可以使用ast.literal\u eval
import ast
data = ast.literal_eval(typ_json)
print(data['FromPort'])
您需要将json
转换为dictionary
import json
data = json.loads(typ_json)
print(data['FromPort'])
有时json
可能会给出一些错误。在这种情况下,您可以使用ast.literal\u eval
import ast
data = ast.literal_eval(typ_json)
print(data['FromPort'])
这是无效的JSON
。您需要替换引号
和加载
生成的str
等
>>> import json
>>> typ_json
"{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}"
>>> x = typ_json.replace("'", '"')
>>> json.loads(x) # now it is a `dict` and you can access the values
{u'PrefixListIds': [], u'FromPort': 80, u'IpRanges': [{u'CidrIp': u'0.0.0.0/0'}], u'ToPort': 80, u'IpProtocol': u'tcp', u'UserIdGroupPairs': [], u'Ipv6Ranges': [{u'CidrIpv6': u'::/0'}]}
>>> json.loads(x)['FromPort']
80
这是无效的JSON
。您需要替换引号
和加载
生成的str
等
>>> import json
>>> typ_json
"{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}"
>>> x = typ_json.replace("'", '"')
>>> json.loads(x) # now it is a `dict` and you can access the values
{u'PrefixListIds': [], u'FromPort': 80, u'IpRanges': [{u'CidrIp': u'0.0.0.0/0'}], u'ToPort': 80, u'IpProtocol': u'tcp', u'UserIdGroupPairs': [], u'Ipv6Ranges': [{u'CidrIpv6': u'::/0'}]}
>>> json.loads(x)['FromPort']
80
我还建议您使用typ_json.get(key)
而不是直接访问密钥,因为它可能不存在。这不是有效的json。它看起来像是一本转换为str
的Python字典。这个问题和错误是误导性的<代码>类型错误:列表索引必须是整数或切片,而不是str
表明它是一个列表
,但您显示的是一个str
,我还建议您使用typ\u json.get(key)
而不是直接访问键,因为它可能不存在。这不是有效的json。它看起来像是一本转换为str
的Python字典。这个问题和错误是误导性的<代码>类型错误:列表索引必须是整数或切片,而不是str
表明它是一个列表
,但您显示的是一个str
这与其他答案有何不同?我没有看到您的答案,所以我认为它应该是正确的答案。这与其他答案有何不同?我没有看到您的答案,所以我认为这应该是正确的答案。我得到了这个错误AttributeError:“dict”对象没有属性“replace”,那么您的typ_json
就已经是dict
。但是你在问题中显示的是,假设它已经是一个dict,那么我如何访问FromPort值?typ_json['FromPort']
会告诉你我得到了这个错误属性error:'dict'对象没有属性'replace',那么你的typ_json
已经是一个dict
。但您在问题中显示的内容表明,假设它已经是dict,那么它是一个str
,如何访问FromPort值?typ_json['FromPort']
将为您提供这一信息