如何在PHP中序列化规范/规范化JSON

时间:2016-02-16 15:04:43

标签: php json

JSON中键的顺序不相关,因此PHP的json_encode在序列化JSON格式时使用键的内部顺序。我想确保等效的JSON总是以相同的形式序列化。例如,以下示例中的$a$b

$a = ["foo" => 1, "bar" => 2, "doz" => 3];
$b = ["doz" => 3, "bar" => 2, "foo" => 1];
print json_encode($a)."\n";
print json_encode($b)."\n";

导致不同的序列化

{"foo":1,"bar":2,"doz":3}
{"doz":3,"bar":2,"foo":1}

但它们是等价的。

1 个答案:

答案 0 :(得分:2)

你需要以某种方式对数组进行排序,我建议按键排序(foo,bar,doz)。 http://php.net/manual/en/function.ksort.php

使用相同的按键时,顺序将始终相同。

我还没有对此进行测试,但它应该适用于您的代码。

$a = ["foo" => 1, "bar" => 2, "doz" => 3];
$b = ["doz" => 3, "bar" => 2, "foo" => 1];
ksort($a);
ksort($b);
print json_encode($a)."\n";
print json_encode($b)."\n";

这将打印:

  

{"杆":2" DOZ":3,"富":1}

     

{"杆":2" DOZ":3,"富":1}