我能';在Python中找不到从单引号JSON提取数据的方法

我能';在Python中找不到从单引号JSON提取数据的方法,python,json,Python,Json,我目前正在用Python进行一个小项目,必须处理来自API的JSON响应,但我找不到从API发送的数据中提取单个字段的方法: 我的代码如下: def netdisc(): 打印('尝试自动发现色调桥') 用卷发。得到它https://discovery.meethue.com/“)作为r: 如果r.status_code==200: req=r.json() ip=json.load(req)[u'internalipaddress'] 打印(ip) 注意:curl是我经常给请求模块起的名字

我目前正在用Python进行一个小项目,必须处理来自API的JSON响应,但我找不到从API发送的数据中提取单个字段的方法:

我的代码如下:

def netdisc():
打印('尝试自动发现色调桥')
用卷发。得到它https://discovery.meethue.com/“)作为r:
如果r.status_code==200:
req=r.json()
ip=json.load(req)[u'internalipaddress']
打印(ip)
注意:curl是我经常给
请求
模块起的名字

API的响应是:

[{'id':'redact','internalipaddress':'redact'}]
我需要提取字段
internalipaddress

这里的问题是飞利浦色调发现服务只输出单引号的JSON,据我所知,JSON模块只能处理双引号的JSON

>json.load(“{id':'redact','internalipaddress':'redact'}”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.8/json/_init__.py”,第357行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python3.8/json/decoder.py”,第337行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib/python3.8/json/decoder.py”,第353行
obj,end=self.scan_一次(s,idx)
json.decoder.JSONDecodeError:应为包含在双引号中的属性名:第1行第2列(字符1)
如果我将每个单引号更改为双引号,则效果很好:

>>json.load('{“id”:“redact”,“internalipaddress”:“redact”}')[u'internalipaddress']
“编辑”

如果有人有一个想法/解决方案,那将是非常糟糕的,我想你误解了:
req=r.json()
。这已经为您解码了
json
响应,并将其转换为python
dict

您的意思是:
打印(req['internalipaddress'])

为了明确所涉及的类型:

导入json
j='{“id”:“已编辑”,“internalipaddress”:“已编辑”}'
打印(类型(j),j)
d=json.loads(j)
打印(类型(d),d)
输出:

<class 'str'> {"id": "REDACTED", "internalipaddress": "REDACTED"}
<class 'dict'> {'id': 'REDACTED', 'internalipaddress': 'REDACTED'}
{“id”:“redact”,“internalipaddress”:“redact”}
{'id':'REDACTED','internalipaddress':'REDACTED'}
变量
j
是一个字符串,其内容与规范匹配,这意味着
json
模块可用于将字符串转换为python
dict


打印每个字符串时,字符串周围必须有双引号,但是当python打印
dict
的内容时,字符串被呈现为被单引号包围。

req=r.json()
->
req
已经是json对象,无需再次加载
requests.Response.json()
是一个方便的函数。我相信它是需要的,因为不需要它,@NicolasFormichella
ip=r.json()[0]['internalipaddress']
。字符串仅使用双引号。@MetallimaX,
requests.Response.json()
已将json字符串转换为
dict