2016-02-16 194 views
0

JSON中的键顺序无关,因此PHP的json_encode在序列化JSON格式时使用键的内部顺序。我想确保等效的JSON始终以相同的形式序列化。例如$a$b在下面的例子中如何序列化PHP中的规范化/规范化JSON

$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} 

,但他们是等价的。

+2

编码前的ksort ...! – deceze

+0

@deceze是但递归。 – Jakob

回答

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, “foo” 的:1}

{ “栏”:2 “DOZ” :3,“foo”:1}

+0

感谢指向ksort的指针。你的解决方案不适用于递归数组,但这是一个好的开始。 – Jakob