在Python中,有没有一种方法可以在解析字符串之前检查它是否是有效的JSON?
例如,使用Facebook Graph API时,它有时会返回JSON,有时会返回图像文件。
发布于 2011-04-01 10:35:54
我想说的是,解析它是你真正完全了解它的唯一方法。如果格式不正确,python的json.loads()
函数(几乎可以肯定)会引发异常。但是,根据示例的目的,您可能只需检查前几个非空格字符...
我对facebook发回的JSON并不熟悉,但是大多数来自web应用的JSON字符串都会以一个开放的方形[
或花括号{
开头。据我所知,没有任何图像格式是以这些字符开头的。
相反,如果您知道可能显示的图像格式,则可以检查字符串的开头是否有签名来识别图像,如果不是图像,则假定您有JSON。
识别图形而不是文本字符串的另一个简单技巧是测试字符串的前几十个字符中是否有非ASCII字符(假设JSON是ASCII)。
发布于 2015-02-18 21:14:44
对于这个问题,我想出了一个通用的、有趣的解决方案:
class SafeInvocator(object):
def __init__(self, module):
self._module = module
def _safe(self, func):
def inner(*args, **kwargs):
try:
return func(*args, **kwargs)
except:
return None
return inner
def __getattr__(self, item):
obj = getattr(self.module, item)
return self._safe(obj) if hasattr(obj, '__call__') else obj
你可以这样使用它:
safe_json = SafeInvocator(json)
text = "{'foo':'bar'}"
item = safe_json.loads(text)
if item:
# do something
发布于 2021-06-07 19:27:46
在try块中简单得多。然后,您可以验证主体是否为有效的JSON
async def get_body(request: Request):
try:
body = await request.json()
except:
body = await request.body()
return body
https://stackoverflow.com/questions/5508509
复制相似问题