Python json.decoder.JSONDecoder.parse_float Attribut



The Python json.decoder.JSONDecoder.parse_float attribute is used to specify a custom function for decoding floating-point numbers when parsing JSON.

By default, Python uses the built-in float type for handling floating-point values in JSON. However, this attribute allows users to replace it with an alternative function, such as decimal.Decimal for higher precision.

Syntax

Following is the syntax of using the parse_float attribute −

json.decoder.JSONDecoder(parse_float=function)

Parameter

It is a function that takes a string and returns a floating-point representation.

Return Value

The parse_float attribute affects how floating-point numbers are parsed from JSON and returns a user-defined numeric type.

Example: Using parse_float with Default float

In this example, we parse a JSON string containing floating-point numbers using the default float type −

import json

# JSON string with float numbers
json_string = '{"price": 99.99, "tax": 5.75}'

# Create JSONDecoder instance with default float
decoder = json.decoder.JSONDecoder(parse_float=float)

# Decode JSON
parsed_data = decoder.decode(json_string)

print("Parsed JSON:", parsed_data)
print("Type of 'price':", type(parsed_data["price"]))

Following is the output obtained −

Parsed JSON: {'price': 99.99, 'tax': 5.75}
Type of 'price': <class 'float'>

Example: Using parse_float with decimal.Decimal

Using decimal.Decimal provides higher precision for floating-point numbers −

import json
from decimal import Decimal

# JSON string with float numbers
json_string = '{"price": 99.99, "tax": 5.75}'

# Create JSONDecoder instance with Decimal for higher precision
decoder = json.decoder.JSONDecoder(parse_float=Decimal)

# Decode JSON
parsed_data = decoder.decode(json_string)

print("Parsed JSON:", parsed_data)
print("Type of 'price':", type(parsed_data["price"]))

Following is the output of the above code −

Parsed JSON: {'price': Decimal('99.99'), 'tax': Decimal('5.75')}
Type of 'price': <class 'decimal.Decimal'>

Example: Using parse_float to Round Floats

You can also define a custom function to round floating-point numbers while decoding −

import json

# Custom function to round float values
def round_float(value):
   return round(float(value), 2)  # Rounds to 2 decimal places

# JSON string with float numbers
json_string = '{"price": 99.999, "tax": 5.756}'

# Create JSONDecoder instance with rounding function
decoder = json.decoder.JSONDecoder(parse_float=round_float)

# Decode JSON
parsed_data = decoder.decode(json_string)

print("Rounded JSON:", parsed_data)

We get the output as shown below −

Rounded JSON: {'price': 100.0, 'tax': 5.76}

Example: Convert Floats to Strings

Another use case of parse_float is converting float numbers to strings during decoding −

import json

# Custom function to convert floats to strings
def float_to_string(value):
   return f"{value} (converted)"

# JSON string with float numbers
json_string = '{"price": 99.99, "tax": 5.75}'

# Create JSONDecoder instance with float_to_string function
decoder = json.decoder.JSONDecoder(parse_float=float_to_string)

# Decode JSON
parsed_data = decoder.decode(json_string)

print("Converted JSON:", parsed_data)

The result produced is as follows −

Converted JSON: {'price': '99.99 (converted)', 'tax': '5.75 (converted)'}
python_json.htm
Advertisements