Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Python json.encoder.FLOAT_REPR Attribute



The Python json.encoder.FLOAT_REPR attribute was historically used to control the string representation of floating-point numbers in JSON encoding.

However, in modern versions of Python, this attribute has been removed, and floating-point representation is now handled internally by the built-in repr() function.

Syntax

Following is the syntax of the json.encoder.FLOAT_REPR attribute −

import json.encoder

json.encoder.FLOAT_REPR = custom_float_repr_function

Description

  • The FLOAT_REPR attribute was used to set a custom function for formatting floating-point numbers in JSON output.
  • It allowed modifying how floats were represented as strings when encoding JSON.
  • As of Python 3.6+, this attribute has been removed, and JSON encoding uses the default floating-point representation.

Example: Custom Float Representation

In this example, we define a custom float representation function and assign it to json.encoder.FLOAT_REPR (only applicable in older Python versions) −

import json

# Define a custom float representation function
def custom_float_repr(value):
   return format(value, ".2f")  # Represent floats with two decimal places

# Assign custom function to FLOAT_REPR (Only works in older Python versions)
json.encoder.FLOAT_REPR = custom_float_repr

# Sample dictionary with float values
data = {"price": 12.34567, "weight": 9.87654}

# Encode dictionary to JSON string
json_output = json.dumps(data)

print("Custom Float JSON:", json_output)

Following is the output obtained (Only in older Python versions) −

Custom Float JSON: {"price": 12.34567, "weight": 9.87654}

Example: Formatting Floats in Modern Python

Since FLOAT_REPR is no longer available, we can use the default parameter in json.dumps() to format floats −

import json

# Define a function to format floats
def format_floats(obj):
   if isinstance(obj, float):
      return format(obj, ".2f")  # Keep two decimal places
   raise TypeError("Type not serializable")

# Sample dictionary with float values
data = {"length": 23.56789, "temperature": 98.65432}

# Encode with custom float formatting
json_output = json.dumps(data, default=format_floats)

print("Formatted Float JSON:", json_output)

Following is the output of the above code −

Formatted Float JSON: {"length": 23.56789, "temperature": 98.65432}

Example: Using Custom Encoder Class

We can define a custom JSON encoder class to control float representation −

import json

# Custom JSON encoder class
class CustomFloatEncoder(json.JSONEncoder):
   def encode(self, obj):
      if isinstance(obj, float):
         return format(obj, ".3f")  # Represent float with three decimal places
      return super().encode(obj)

# Sample data with float values
data = {"distance": 45.6789, "speed": 123.456789}

# Encode with custom float formatting
json_output = json.dumps(data, cls=CustomFloatEncoder)

print("Custom Encoder JSON:", json_output)

We get the output as shown below −

Custom Encoder JSON: {"distance": 45.6789, "speed": 123.456789}

Example: Rounding Floats Before Encoding

We can manually round float values before encoding them to JSON −

import json

# Sample dictionary with float values
data = {"price": 45.67891, "tax": 7.891234}

# Round float values before encoding
rounded_data = {key: round(value, 2) if isinstance(value, float) else value for key, value in data.items()}

# Encode dictionary to JSON string
json_output = json.dumps(rounded_data)

print("Rounded Float JSON:", json_output)

The result produced is as follows −

Rounded Float JSON: {"price": 45.68, "tax": 7.89}
python_json.htm
Advertisements