Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the correct way to format "true" in JSON?

Tags:

I want to give a simple true response, but according to various JSON parsers, this is not valid JSON:

true 

However, PHP and Javascript act like "true" is indeed valid JSON for true, both when encoding and when decoding:

PHP-

echo json_encode( true ); // outputs: true echo json_decode( true ); // outputs: 1 echo gettype(json_decode( true )); // outputs: boolean 

jQuery-

JSON.stringify( true );   // outputs: true jQuery.parseJSON( true ); // outputs: true typeof jQuery.parseJSON( true ); // outputs: boolean 

So what is the correct way to send a true response formatted as JSON? Are the validators all wrong?

like image 512
brentonstrine Avatar asked Oct 17 '13 19:10

brentonstrine


People also ask

How is true represented in JSON?

In Python, "boolean" is analogous to bool . Note that in JSON, true and false are lower case, whereas in Python they are capitalized ( True and False ).

What is the correct format for JSON?

JSON Syntax RulesData is in name/value pairs. Data is separated by commas. Curly braces hold objects. Square brackets hold arrays.

Is true valid in JSON?

JSON BooleansValues in JSON can be true/false.


1 Answers

From the RFC :

A JSON text is a serialized object or array.

  JSON-text = object / array 

Most parsers don't accept anything as root that isn't an object or an array. Only less strict parsers will accept that your JSON string just contains true.

So your options are

  • to not use JSON
  • to wrap your boolean in an object : {"result":true} or an array : [true]

Update:

The situation changed. Newer versions of the JSON specification (see this one) explicitly accept any serialized value as root of a document:

A JSON text is a serialized value. Note that certain previous specifications of JSON constrained a JSON text to be an object or an array. Implementations that generate only objects or arrays where a JSON text is called for will be interoperable in the sense that all implementations will accept these as conforming JSON texts.

It means it's now legally acceptable to use a boolean as unique value. But of course not all libraries in use are updated, which implies using anything other than an object or an array might still be problematic.

like image 84
Denys Séguret Avatar answered Oct 21 '22 20:10

Denys Séguret