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

Leave a Reply

Your email address will not be published.