I have an array similar to :
[0] => stdClass Object
(
[name] => John
[id] => 1
[pass] => 0
)
The array is returned by a sql query. Now I need to use json_encode
and I want the id to be integer and pass Boolean, but they get string types after json_encode
. How can I do it with the correct datatypes in json_encode
?
You could loop through the array, casting each value with the key of pass
to a boolean and each id
to an integer like so:
<?php
foreach ($results as $result) {
$result->id = (int) $result->id;
$result->pass = (bool) $result->pass;
}
id
is integer. to make pass
boolean set it as boolean
(using true
, false
) or cast it to boolean:
$obj->pass = (bool)$obj->pass;
For the type conversions, you can iterate over the list first and cast the relevant properties:
foreach($data as $d)
{
$d->id = (int)$d->id;
$d->pass = (bool)$d->pass;
}
For the string conversion issue; the 2nd argument of json_encode()
is options
(a bitmask). The available options are listed here. The relevant option in your case is JSON_NUMERIC_CHECK
, which will prevent your numbers from being converted to strings in the resulting JSON:
$json = json_encode($data, JSON_NUMERIC_CHECK);