您可以将布尔值传递给json_decode以返回数组而不是对象
json_decode('{"foo", "bar", "baz"}', true); // array(0 => 'foo', 1 => 'bar', 2 => 'baz')
我的问题是这个。解析对象文字时,这是否保证了项目的顺序将被保留?我知道JSON对象属性不是有序的,但PHP数组是。我在PHP手册中的任何地方都找不到明确解决的问题。谨慎的做法可能是错误的,但如果可能的话,我想避免包含某种“索引”子属性。
答案 0 :(得分:4)
在这种情况下,将JSON传递给PHP时使用数组会不会更有意义。如果JSON中没有任何对象键(在PHP中成为关联数组键),只需将其作为数组发送即可。这样你就可以保证他们在PHP中与javascript中的顺序相同。
json_decode('{["foo", "bar", "baz"]}');
json_decode('["foo", "bar", "baz"]'); //I think this would work
如果你需要关联数组(这就是你将第二个参数作为true
传递的原因),你必须想出一些方法来在传递时保持它们的顺序。在解码之后,你将撬开必须对生成的数组进行一些后处理,以便按照你想要的格式对其进行格式化。
$json = '{[ {"key" : "val"}, {"key" : "val"} ]}';
json_decode($json, true);
答案 1 :(得分:1)
我曾多次使用过json_decode(),结果顺序与PHP客户端应用程序保持完整。但是以Python为例,它并没有保留顺序。
一种可以放心的方法是用多个例子来测试它。
答案 2 :(得分:1)
就个人而言,我从不信任任何系统返回确切的订单,除非该订单是专门定义的。如果你真的需要一个订单,那么使用一个字典又名2dimension数组,并为列表中的每个值分配一个位值(0,1,2,3 ...)。
如果您将此规则应用于所有内容,您将永远不必担心该阵列的交付/存储,无论是XML,JSON还是数据库。
请记住,仅仅因为某些事情以某种方式发生,并不意味着故意这样做。它类似于认为数据库中的行有一个顺序,实际上它们不会使用ORDER BY子句。认为ID 1始终位于SELECT中的ID 2之前是不安全的。
答案 3 :(得分:1)
缺乏明确的陈述我会说,根据定义,不会保留明确的顺序。
我的主要思路是什么顺序,确切地说,这将保留? json_decode函数将javascript对象文字的字符串表示作为其参数,然后返回对象或数组。函数的输入(对象文字作为字符串)没有显式排序,这意味着没有明确的顺序要维护json_decode函数。