Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python访问json中的值_Python_Json - Fatal编程技术网

使用python访问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']) 但我得

我有一个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'])

但我得到了一个错误:

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']
将为您提供这一信息