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