python – What is the difference between json.load() and json.loads() functions
python – What is the difference between json.load() and json.loads() functions
Yes, s
stands for string. The json.loads
function does not take the file path, but the file contents as a string. Look at the documentation.
Just going to add a simple example to what everyone has explained,
json.load()
json.load
can deserialize a file itself i.e. it accepts a file
object, for example,
# open a json file for reading and print content using json.load
with open(/xyz/json_data.json, r) as content:
print(json.load(content))
will output,
{uevent: {uid: u5206c7e2-da67-42da-9341-6ea403c632c7, uname: uSufiyan Ghori}}
If I use json.loads
to open a file instead,
# you cannot use json.loads on file object
with open(json_data.json, r) as content:
print(json.loads(content))
I would get this error:
TypeError: expected string or buffer
json.loads()
json.loads()
deserialize string.
So in order to use json.loads
I will have to pass the content of the file using read()
function, for example,
using content.read()
with json.loads()
return content of the file,
with open(json_data.json, r) as content:
print(json.loads(content.read()))
Output,
{uevent: {uid: u5206c7e2-da67-42da-9341-6ea403c632c7, uname: uSufiyan Ghori}}
Thats because type of content.read()
is string, i.e. <type str>
If I use json.load()
with content.read()
, I will get error,
with open(json_data.json, r) as content:
print(json.load(content.read()))
Gives,
AttributeError: str object has no attribute read
So, now you know json.load
deserialze file and json.loads
deserialize a string.
Another example,
sys.stdin
return file
object, so if i do print(json.load(sys.stdin))
, I will get actual json data,
cat json_data.json | ./test.py
{uevent: {uid: u5206c7e2-da67-42da-9341-6ea403c632c7, uname: uSufiyan Ghori}}
If I want to use json.loads()
, I would do print(json.loads(sys.stdin.read()))
instead.
python – What is the difference between json.load() and json.loads() functions
Documentation is quite clear: https://docs.python.org/2/library/json.html
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.
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.
So load
is for a file, loads
for a string