如何判断该字符串是json?

时间:2016-09-15 17:11:50

标签: python json

我有一个字符串,我从一个实际上是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,并且它不是真的它是真的。你也应该有双引号而不是单引号(我认为不是那么重要)。

希望这能澄清我的问题。

3 个答案:

答案 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']

之类的内容

"More Info Here"

答案 2 :(得分:1)

如果您需要访问JSON消息中的数据,req.json()已经满足您的需求。它将JSON消息解析为Python数据结构,通常是列表和dicts的一些嵌套格式。结果看起来不像有效的JSON文本,因为它不再是JSON;它是一个数据结构,你可以实际索引并从中获取数据。

如果您需要一个JSON字符串 - 一系列带有大括号和冒号以及双引号的字符 - 可能是因为您计划再次通过网络发送它,req.text就是您所需要的。