我有一个字符串,我从一个实际上是JSON的REST API中提取。
我无法使用req.json()
因为python没有正确格式化json,即它使用的是单引号而不是双引号,而且它将unicode符号放在不应该的地方一。这意味着我无法使用它来响应REST,因为JSON格式不正确。
然而r.text
打印我可以使用的json,如果我可以告诉python:"这是一个json而不是一个字符串,把它当作原样并将它用作json&#34 ;
无论如何我能做到这一点吗?或者无论如何要告诉Python按照json规范正确格式化json对象(即没有unicode字符,并使用双引号)。
编辑:
显然这不清楚,我道歉。
问题是我必须发送一个正确的JSON格式的对象而不是python对象。这是我得到的:
r.text: {" domain":" example.com"," Link":null," monitor":" true"}
r.json(): {u'域名':你' example.com',你'链接":无,你' minotor':真实}
这不是适当的JSON格式化。你不能拥有unicode字符,它不是null它是null,并且它不是真的它是真的。你也应该有双引号而不是单引号(我认为不是那么重要)。
希望这能澄清我的问题。
答案 0 :(得分:3)
您可以通过捕获错误来检查字符串是否有效。
import json
def is_json(myjson):
try:
json_object = json.loads(myjson)
except ValueError, e:
return False
return True
测试用例:
print is_json("{}") #prints True
print is_json("{asdf}") #prints False
print is_json('{ "age":100}') #prints True
print is_json("{'age':100 }") #prints False
print is_json("{\"age\":100 }") #prints True
print is_json('{"age":100 }') #prints True
print is_json('{"foo":[5,6.8],"foo":"bar"}') #prints True
答案 1 :(得分:1)
import json
request_as_json = json.loads(r.text)
然后您可以调用request_as_json['key']
答案 2 :(得分:1)
如果您需要访问JSON消息中的数据,req.json()
已经满足您的需求。它将JSON消息解析为Python数据结构,通常是列表和dicts的一些嵌套格式。结果看起来不像有效的JSON文本,因为它不再是JSON;它是一个数据结构,你可以实际索引并从中获取数据。
如果您需要一个JSON字符串 - 一系列带有大括号和冒号以及双引号的字符 - 可能是因为您计划再次通过网络发送它,req.text
就是您所需要的。