【问题标题】:Encode PHP array with non-numeric keys to JSON array使用非数字键将 PHP 数组编码为 JSON 数组
【发布时间】:2018-04-03 16:46:49
【问题描述】:

我有这个 PHP 数组:

$a = array(
  "french"=>"bonjour",
  "italian"=>"buongiorno",
  "spanish"=>"buenos dias"
);

但是当我做echo json_encode($a); 时,我得到:

{
   "french": "bonjour",
   "italian": "buongiorno",
   "spanish": "buenos dias"
}

即一个 JSON 对象,但我想要一个 JSON 数组,代价是保留字符串键,就像这样:

[
   "bonjour",
   "buongiorno",
   "buenos dias"
]

我该怎么做?

【问题讨论】:

  • 没有像“JSON 对象”或“JSON 数组”这样的东西。 JSON 是数据结构(通常是对象或数组)的文本表示。当它被解码时,就会得到一个与用于创建它的数据结构相似的数据结构。
  • 我明白,但我的意思是我想要[ ] 括号而不是{ }
  • @axiac,JSON 中有称为对象和数组的东西,所以你的说法有点误导。想澄清一下吗?
  • 你想要的 JSON 输出的确切内容是什么,@JacopoStanchi?另外,想想相应的 PHP 表示会是什么!
  • 您的预期结果是什么?

标签: php arrays json


【解决方案1】:

你可以使用array_values:

echo json_encode(array_values($a));

【讨论】:

    【解决方案2】:

    Php 数组不是严格意义上的“数组”(字符串/对象/数字/等的集合,通过数字索引标识),而是关联数组。也称为字典或哈希映射。它们用于键值存储。

    JSON 不支持将字典作为一种类型,因此 json_encode 在设计上将它们转换为 json 对象,因为对象是受支持的。

    使用json_decode,可以通过第二个参数来判断是要返回hash map(php数组)还是对象:

    $a = array(
         "french" => "bonjour",
         "italian" => "buongiorno",
         "spanish" => "buenos dias"
    );
    
    $json = json_encode($a);
    
    $object = json_decode($json, false); // this is the default behavior
    $array = json_decode($json, true);
    
    var_dump($object); // the object
    var_dump($array); // same as the starting array
    

    对象将是:

    object(stdClass)#1 (3) {
      ["french"]=>
      string(7) "bonjour"
      ["italian"]=>
      string(10) "buongiorno"
      ["spanish"]=>
      string(11) "buenos dias"
    }
    

    数组将是:

    array(3) {
      ["french"]=>
      string(7) "bonjour"
      ["italian"]=>
      string(10) "buongiorno"
      ["spanish"]=>
      string(11) "buenos dias"
    }
    

    【讨论】:

    • 散列是无关紧要的,因为它是一个实现细节。你的意思是字典,我会说。 PHP 的区别在于 PHP 数组是否具有从零开始的数字键(因此是“普通”数组)。前者编码为 JSON 数组,后者编码为 JSON 对象。
    • @UlrichEckhardt 这个孩子有不同的名字,但都意味着同样的事情。我的主要观点是 JSON 从未打算代表 php 的关联数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多