Skip to main content
Neon Postgres Docs
current

Search documentation

Type to search this documentation.

On this pageOverview

Postgres json_scalar() Function

Convert SQL Scalar Values to JSON Scalar Values

The json_scalar() function introduced in PostgreSQL 17 provides a straightforward way to convert SQL scalar values into their JSON equivalents. Use it when you need to ensure proper type conversion and formatting of individual values for JSON output.

Use json_scalar() when you need to:

  • Convert SQL numbers to JSON numbers
  • Format timestamps as JSON strings
  • Convert SQL booleans to JSON booleans
  • Ensure proper null handling in JSON context

The json_scalar() function uses the following syntax:

SQL
json_scalar(expression) → json

Parameters:

  • expression: Any SQL scalar value to be converted to a JSON scalar value

Let's explore various ways to use the json_scalar() function with different types of input values.

SQL
-- Convert integer
SELECT json_scalar(42);
text
# | json_scalar
---------------
1 | 42
SQL
-- Convert floating-point number
SELECT json_scalar(123.45);
text
# | json_scalar
---------------
1 | 123.45
SQL
-- Convert text
SELECT json_scalar('Hello, World!');
text
# |     json_scalar
--------------------
1 | "Hello, World!"
SQL
-- Convert timestamp
SELECT json_scalar(CURRENT_TIMESTAMP);
text
# |            json_scalar
---------------------------------------
1 | "2024-12-04T06:19:14.458444+00:00"
SQL
-- Convert date
SELECT json_scalar(CURRENT_DATE);
text
# |  json_scalar
----------------
1 | "2024-12-04"
SQL
-- Convert boolean true
SELECT json_scalar(true);
text
# | json_scalar
--------------
1 | true
SQL
-- Convert NULL value
SELECT json_scalar(NULL);
text
# | json_scalar
--------------
1 |
SQL
-- Create a JSON object with properly formatted values
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT,
    created_at TIMESTAMP WITH TIME ZONE
);

INSERT INTO users (name, created_at)
VALUES
    ('Alice', '2024-12-04T14:30:45.000000+00:00'),
    ('Bob', '2024-12-04T15:30:45.000000+00:00');

SELECT json_build_object(
    'id', json_scalar(id),
    'name', json_scalar(name),
    'created_at', json_scalar(created_at)
)
FROM users;
text
# |                              json_build_object
-----------------------------------------------------------------------------------
1 | {"id" : 3, "name" : "Alice", "created_at" : "2024-12-04T14:30:45.000000+00:00"}
2 | {"id" : 4, "name" : "Bob", "created_at" : "2024-12-04T15:30:45.000000+00:00"}
SQL
-- Convert mixed data types in a single query
SELECT json_build_array(
    json_scalar(42),
    json_scalar('text'),
    json_scalar(CURRENT_TIMESTAMP),
    json_scalar(NULL)
);
text
# |                 json_build_array
----------------------------------------------------------
1 | [42, "text", "2024-12-04T06:25:29.928376+00:00", null]

The function follows these conversion rules:

  1. NULL -> SQL NULL
  2. Numbers → JSON numbers (preserving exact value)
  3. Booleans → JSON booleans
  4. All other types → JSON strings with appropriate formatting:
    • Timestamps include timezone when available
    • Text is properly escaped according to JSON standards
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu