Fix: json
This commit is contained in:
parent
56730741bc
commit
de97cd1812
@ -54,14 +54,16 @@ function dol_json_encode($elements)
|
|||||||
//var_dump($num);
|
//var_dump($num);
|
||||||
|
|
||||||
// determine type
|
// determine type
|
||||||
if (is_numeric(key($elements)))
|
if (is_numeric(key($elements)) && key($elements) == 0)
|
||||||
{
|
{
|
||||||
// indexed (list)
|
// indexed (list)
|
||||||
|
$keysofelements=array_keys($elements); // Elements array mus have key that does not start with 0 and end with num-1, so we will use this later.
|
||||||
$output = '[';
|
$output = '[';
|
||||||
for ($i = 0, $last = ($num - 1); isset($elements[$i]); ++$i)
|
for ($i = 0, $last = ($num - 1); $i < $num; $i++)
|
||||||
{
|
{
|
||||||
if (is_array($elements[$i]) || is_object($elements[$i])) $output.= json_encode($elements[$i]);
|
if (! isset($elements[$keysofelements[$i]])) continue;
|
||||||
else $output .= _val($elements[$i]);
|
if (is_array($elements[$keysofelements[$i]]) || is_object($elements[$keysofelements[$i]])) $output.= json_encode($elements[$keysofelements[$i]]);
|
||||||
|
else $output .= _val($elements[$keysofelements[$i]]);
|
||||||
if ($i !== $last) $output.= ',';
|
if ($i !== $last) $output.= ',';
|
||||||
}
|
}
|
||||||
$output.= ']';
|
$output.= ']';
|
||||||
|
|||||||
@ -130,22 +130,35 @@ class JsonLibTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->savlangs=$langs;
|
$this->savlangs=$langs;
|
||||||
$this->savdb=$db;
|
$this->savdb=$db;
|
||||||
|
|
||||||
|
// Do a test with an array starting with 0
|
||||||
$arraytotest=array(0=>array('key'=>1,'value'=>'PRODREF','label'=>'Product ref with é and special chars \\ \' "'));
|
$arraytotest=array(0=>array('key'=>1,'value'=>'PRODREF','label'=>'Product ref with é and special chars \\ \' "'));
|
||||||
|
$arrayencodedexpected='[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]';
|
||||||
|
|
||||||
$encoded=json_encode($arraytotest);
|
$encoded=json_encode($arraytotest);
|
||||||
//var_dump($encoded);
|
$this->assertEquals($arrayencodedexpected,$encoded);
|
||||||
$this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
|
|
||||||
$decoded=json_decode($encoded,true);
|
$decoded=json_decode($encoded,true);
|
||||||
//var_dump($decoded);
|
$this->assertEquals($arraytotest,$decoded,'test for json_xxx');
|
||||||
$this->assertEquals($arraytotest,$decoded);
|
|
||||||
|
|
||||||
$encoded=dol_json_encode($arraytotest);
|
$encoded=dol_json_encode($arraytotest);
|
||||||
//var_dump($encoded);
|
$this->assertEquals($arrayencodedexpected,$encoded);
|
||||||
$this->assertEquals('[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]',$encoded);
|
|
||||||
$decoded=dol_json_decode($encoded,true);
|
$decoded=dol_json_decode($encoded,true);
|
||||||
//var_dump($decoded);
|
$this->assertEquals($arraytotest,$decoded,'test for dol_json_xxx');
|
||||||
$this->assertEquals($arraytotest,$decoded);
|
|
||||||
|
|
||||||
|
// Same test but array start with 2 instead of 0
|
||||||
|
$arraytotest=array(2=>array('key'=>1,'value'=>'PRODREF','label'=>'Product ref with é and special chars \\ \' "'));
|
||||||
|
$arrayencodedexpected='{"2":{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}}';
|
||||||
|
|
||||||
|
$encoded=json_encode($arraytotest);
|
||||||
|
$this->assertEquals($arrayencodedexpected,$encoded);
|
||||||
|
$decoded=json_decode($encoded,true);
|
||||||
|
$this->assertEquals($arraytotest,$decoded,'test for json_xxx');
|
||||||
|
|
||||||
|
$encoded=dol_json_encode($arraytotest);
|
||||||
|
$this->assertEquals($arrayencodedexpected,$encoded);
|
||||||
|
$decoded=dol_json_decode($encoded,true);
|
||||||
|
$this->assertEquals($arraytotest,$decoded,'test for dol_json_xxx');
|
||||||
|
|
||||||
|
// Test with object
|
||||||
$now=gmmktime(12,0,0,1,1,1970);
|
$now=gmmktime(12,0,0,1,1,1970);
|
||||||
$objecttotest=new stdClass();
|
$objecttotest=new stdClass();
|
||||||
$objecttotest->property1='abc';
|
$objecttotest->property1='abc';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user