使用python访问json中的值

时间:2019-04-16 12:18:51

标签: python json

我有一个如下的JSON字符串

typ_json="{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}"

我想访问FromPortToPort值。

我尝试过print(typ_json['FromPort'])

但是我得到了错误:

  

TypeError:列表索引必须是整数或切片,而不是str

3 个答案:

答案 0 :(得分:3)

您需要将json转换为dictionary

import json
data = json.loads(typ_json)
print(data['FromPort'])

有时json可能会出现一些错误。在这种情况下,您可以使用ast.literal_eval

import ast
data = ast.literal_eval(typ_json)
print(data['FromPort'])

答案 1 :(得分:0)

not有效的JSON。您需要将quotesload替换为结果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

答案 2 :(得分:-1)

导入json 导入ast

typ_json =“ {'FromPort':80,'IpProtocol':'tcp','IpRanges':[{'CidrIp':'0.0.0.0/0'}],'Ipv6Ranges':[{'CidrIpv6' :':: / 0'}],'PrefixListIds':[],'ToPort':80,'UserIdGroupPairs':[]}“

端口= ast.literal_eval(typ_json) 打印(端口['FromPort'])