关于python:json.load()和json.loads()函数之间的区别是什么?

What is the difference between json.load() and json.loads() functions

在python中,json.load()json.loads()有什么区别?

我猜load()函数必须与文件对象一起使用(因此我需要使用上下文管理器),而loads()函数将文件的路径作为字符串。这有点令人困惑。

json.loads()中的字母"s"代表字符串吗?

非常感谢你的回答!


是的,s状态的字符串。"不json.loads函数把文件内容的文件的路径,但作为一个字符串。看文档在http://docs.python.org / 2 /图书馆/ json.html!


文档是很清晰的:http:/ / / 2 /图书馆/ json.html docs.python.org

1
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

Deserialize fp (a .read()-supporting file-like object containing a
JSON document) to a Python object using this conversion table.

1
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

Deserialize s (a str or unicode instance containing a JSON document)
to a Python object using this conversion table.

这是一load文件,loadsfor a string


添加一个简单的例子,只是去到什么可能都有,

json.load()

json.loadCAN反序列化文件本身,它fileIU的接受对象,

1
2
with open("json_data.json","r") as content:
  print(json.load(content))

想输出,

1
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

是因为content类型fileIU,

如果我使用json.loads代替,

1
2
with open("json_data.json","r") as content:
  print(json.loads(content))

我会得到这个错误:

TypeError: expected string or buffer

json.loads()

json.loads()deserailize字符串。

使用一个content.read()json.loads()返回内容的文件

1
2
with open("json_data.json","r") as content:
  print(json.loads(content.read()))

输出

1
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

这是因为content.read()类型是字符串,IU

如果我使用一个json.load()content.read()i get误差

1
2
with open("json_data.json","r") as content:
  print(json.load(content.read()))

给,

AttributeError: 'str' object has no attribute 'read'

所以,现在你知道json.loaddeserialze文件和json.loads反序列化的字符串。

另一个例子,

filesys.stdin返回对象,所以我想如果我做print(json.load(sys.stdin))GET JSON数据,实际,

1
2
3
cat json_data.json | ./test.py

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

如果我想我会做print(json.loads(sys.stdin.read()))json.loads()使用,而不是。