json.loads() Function Explained

json.loads() converts JSON text into normal Python data.

Use it when your JSON is already stored in a string, such as:

  • API response text
  • JSON copied into a variable
  • JSON read with file.read()

It is part of Python’s built-in json module.

Quick example #

import json

text = '{"name": "Ana", "age": 20, "is_student": true}'
data = json.loads(text)

print(data)
print(type(data))
print(data["name"])

Output:

{'name': 'Ana', 'age': 20, 'is_student': True}
<class 'dict'>
Ana

Use json.loads() when your JSON is already in a string. It returns normal Python objects like dict, list, str, int, float, bool, and None.

What json.loads() does #

json.loads():

  • Parses a JSON-formatted string
  • Converts JSON text into Python objects
  • Commonly returns a dict or list
  • Can also return str, int, float, bool, or None
  • Comes from Python’s built-in json module

In short, it takes text like this:

'{"name": "Ana", "age": 20}'

and turns it into a real Python dictionary:

{"name": "Ana", "age": 20}

When to use json.loads() #

Use json.loads() when the input is a string containing valid JSON.

Common cases:

  • JSON returned from an API as text
  • A text file that you already read into a string
  • JSON pasted into your code for testing
  • A JSON list stored in a variable

Do not use it directly on a file object.

If you are reading JSON from an open file, use json.load() instead.

Basic example #

Here is a simple example that converts a JSON object string into a Python dictionary:

import json

text = '{"name": "Maya", "age": 18, "is_student": true}'
data = json.loads(text)

print(data)
print(type(data))
print(data["is_student"])
print(data["name"])

Output:

{'name': 'Maya', 'age': 18, 'is_student': True}
<class 'dict'>
True
Maya

Notice this important detail:

  • JSON true becomes Python True

After parsing, you can use normal Python dictionary access:

print(data["name"])

What types JSON becomes in Python #

When json.loads() parses JSON, it converts each JSON type into a matching Python type.

JSON typePython type
objectdict
arraylist
stringstr
numberint or float
true / falseTrue / False
nullNone

Example:

import json

text = '''
{
    "user": "Liam",
    "score": 9.5,
    "active": true,
    "tags": ["python", "json"],
    "extra": null
}
'''

data = json.loads(text)

print(type(data))
print(type(data["user"]))
print(type(data["score"]))
print(type(data["active"]))
print(type(data["tags"]))
print(data["extra"])

Output:

<class 'dict'>
<class 'str'>
<class 'float'>
<class 'bool'>
<class 'list'>
None

json.loads() vs json.load() #

These two functions are very similar, but they read from different kinds of input.

json.loads() #

Use json.loads() when you have a string:

import json

text = '{"name": "Ana"}'
data = json.loads(text)
print(data)

json.load() #

Use json.load() when you have a file object:

import json

with open("data.json", "r") as file:
    data = json.load(file)

print(data)

The difference is:

  • json.loads() reads from a string
  • json.load() reads from a file object

If you want the file-based version, see json.load() explained.

Common errors beginners hit #

Here are some common problems when using json.loads().

Passing invalid JSON text #

This causes a json.JSONDecodeError.

Example:

import json

text = "{name: 'Ana'}"
data = json.loads(text)

This fails because the text is not valid JSON.

Using single quotes instead of double quotes #

JSON requires double quotes for:

  • object keys
  • string values

Invalid JSON:

"{'name': 'Ana'}"

Valid JSON:

'{"name": "Ana"}'

Forgetting to import json #

This causes a NameError.

text = '{"name": "Ana"}'
data = json.loads(text)

Fix:

import json

Passing a dict instead of a JSON string #

If you already have a Python dictionary, you do not need json.loads().

Wrong:

import json

data = {"name": "Ana"}
result = json.loads(data)

Correct:

data = {"name": "Ana"}
print(data["name"])

Use json.dumps() if you want to convert a Python object into JSON text.

Trying to parse an empty string #

An empty string is not valid JSON.

import json

text = ""
data = json.loads(text)

This raises json.JSONDecodeError.

How to handle bad JSON safely #

If the JSON might be invalid, use try and except.

import json

text = '{"name": "Ana", "age": 20}'

try:
    data = json.loads(text)
    print("Parsed successfully:", data)
except json.JSONDecodeError:
    print("Invalid JSON")
    print("Raw text:", repr(text))

This helps your program fail safely instead of crashing.

When parsing fails:

  • Print the raw string
  • Check whether the input is really a string
  • Look for missing commas
  • Check for single quotes instead of double quotes
  • Look for extra characters before or after the JSON

Helpful debugging lines:

print(text)
print(type(text))
print(repr(text))

Example with bad JSON:

import json

text = "{'name': 'Ana'}"

try:
    data = json.loads(text)
except json.JSONDecodeError as error:
    print("JSON error:", error)
    print("Problem text:", repr(text))

Common real-world uses #

json.loads() is often used in practical Python code.

Parsing API response text #

Some APIs return JSON as text. You can parse that text into Python data.

import json

response_text = '{"status": "ok", "results": [1, 2, 3]}'
data = json.loads(response_text)

print(data["status"])
print(data["results"])

Converting copied JSON text into a Python dict #

import json

text = '{"city": "Tokyo", "population": 14}'
data = json.loads(text)

print(data["city"])

Reading JSON after using file.read() #

If you already used .read(), the result is a string, so json.loads() is correct.

import json

with open("data.json", "r") as file:
    text = file.read()

data = json.loads(text)
print(data)

If you want to parse directly from the file object, use json.load().

Turning a JSON list string into a Python list #

import json

text = '["apple", "banana", "cherry"]'
items = json.loads(text)

print(items)
print(type(items))
print(items[0])

Output:

['apple', 'banana', 'cherry']
<class 'list'>
apple

Common mistakes #

These are frequent causes of problems:

  • JSON uses double quotes, but your input uses single quotes
  • The input is already a Python dict or list
  • The string is empty or incomplete
  • The JSON text has a trailing comma
  • You used json.loads() on a file object instead of json.load()

If you are not sure what you have, inspect it first:

print(text)
print(type(text))
print(repr(text))

FAQ #

What does json.loads() return? #

It returns a Python object created from the JSON string, usually a dict or list.

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

json.loads() parses a string. json.load() parses a file object.

Can json.loads() parse single quotes? #

No. Valid JSON uses double quotes for strings and object keys.

Why do I get JSONDecodeError? #

The string is not valid JSON. Check quotes, commas, brackets, and extra characters.

Do I need json.loads() if I already have a Python dict? #

No. json.loads() is only for JSON strings, not Python objects.

See also #

If you are choosing the right JSON tool:

  • Use json.loads() to parse JSON from a string
  • Use json.load() to parse JSON from a file
  • Use json.dumps() to convert Python objects back into JSON text

Press Esc to close