如何在Python中检查字符串是否是有效的JSON?

Joe*_*ake 158 python json

在Python中,有没有办法在尝试解析之前检查字符串是否是有效的JSON?

例如,使用Facebook Graph API之类的东西,有时它会返回JSON,有时它可能会返回一个图像文件.

Joh*_*ess 201

您可以尝试这样做json.loads(),ValueError如果您传递的字符串无法解码为JSON ,则会抛出.

一般来说,这种情况的" Pythonic "哲学被称为EAFP,因为更容易要求宽恕而不是许可.

  • 只是一个注释... json.loads('10')没有抛出ValueError,我确信'10'不是一个有效的json ... (5认同)
  • 我可以看到它是如何工作的.引导我到下一个问题.它抛出一个ValueError.我现在想要它做的是返回有问题的字符串,这样我就可以用它来做其他事情了.到目前为止,我只收到了错误消息和类型. (3认同)
  • 尽管规范说JSON文本必须是数组或对象,但大多数编码器和解码器(包括Python)都可以使用"top"中的任何JSON值,包括数字和字符串.`10`是有效的JSON数值. (3认同)
  • 只返回你在except子句中传递给`loads`的字符串有什么问题? (2认同)

Eri*_*ski 125

示例Python脚本如果字符串有效,则返回布尔值json:

import json

def is_json(myjson):
  try:
    json_object = json.loads(myjson)
  except ValueError as e:
    return False
  return True
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

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
Run Code Online (Sandbox Code Playgroud)

将JSON字符串转换为Python字典:

import json
mydict = json.loads('{"foo":"bar"}')
print(mydict['foo'])    #prints bar

mylist = json.loads("[5,6,7]")
print(mylist)
[5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

将python对象转换为JSON字符串:

foo = {}
foo['gummy'] = 'bear'
print(json.dumps(foo))           #prints {"gummy": "bear"}
Run Code Online (Sandbox Code Playgroud)

如果您想要访问低级解析,请不要自己滚动,使用现有的库:http://www.json.org/

关于python JSON模块的精彩教程:https: //pymotw.com/2/json/

  • 为什么地狱没有适当的验证方法?应该有一种方法来进行错误检查而不会杀死金丝雀. (4认同)