rfc:is_json

This is an old revision of the document!


PHP RFC: is_json

Preliminary note

If the name of the function needs to be change, I will change it; the functionality is the important thing here

Introduction

This RFC introduces a new function called is_json() to validate if an string contains a valid json.

Most userland implementations to achieve this are done using json_decode() which by design generates an object/array while parsing the string, ergo using memory and processing, that could be save.

Proposal

Description

is_json(string $json, int $depth = 512, int $flags = 0): bool

Parameters

json

The json string being analyzed.

This function only works with UTF-8 encoded strings.

Note:

PHP implements a superset of JSON as specified in the original » RFC 7159.

depth

Maximum nesting depth of the structure being decoded.

flags

Bitmask of JSON_INVALID_UTF8_IGNORE, JSON_THROW_ON_ERROR. The behavior of these constants is described on the JSON constants page.

Function description, examples, technical strategy, current JSON parser, etc.

Return values

Returns true if the string passed contains a valid json, otherwise returns false.

Extra behavior

-

Examples

-

Fundaments/Reasons

Disadvantages of using json_decode

By design, json_decode() generates an object/array while parsing the string, ergo using memory and processing for it, that is not needed if the only thing to discover is if a string contains a valid json.

Disadvantages of using regex

Using a regex for this task forces different, error-prone, hard to maintain, implementations.

Needs from major projects and developers

In the “References” section, there is a list of major open-source php projects needing this feature; also in th mntioned section can find a link to one of the most popular StackOverflow questions, which somehow reflects the need from our developers to have a feature like this included.

Complexity added in the core

At the moment, there is a JSON parser in the core, used by json_decode to do its job, so there is no need to write a new JSON parser for this RFC; the proposed function will use the existing JSON parser exclusively to parse an string without generating any object/array in memory for it.

Backward Incompatible Changes

None, as this is a new function only.

is_json will no longer be available as a function name, could break potential userland implementations.

Proposed PHP Version(s)

next PHP 8.x

RFC Impact

This RFC has no impact on SAPIs, existing extensions, Opcache, etc.

Open Issues

- No open issues

Future Scope

- (To be defined)

Proposed Voting Choices

- (To be defined)

Implementation

- (To be done later after pushing to github)

References

- (To be done later) -- Links to external references, discussions or RFCs -- Links to major open-source projects emulating this function using json_decode -- Link to Stackoverflow pointing the question, which this proposed function satisfy the needs

Rejected Features

- No rejected features currently.

rfc/is_json.1660592491.txt.gz · Last modified: 2022/08/15 19:41 by juan_morales