【问题标题】:PHP JSON - have identical keys for JSON output from PHP arrayPHP JSON - PHP 数组的 JSON 输出具有相同的键
【发布时间】:2014-07-17 14:26:42
【问题描述】:

有没有办法将 PHP 数组(或任何其他类似的 PHP 对象)编码为 JSON,同时 JSON 数组具有相同的键?

这是一个例子:

{"categories" : [ {"key": "data1"}, {"key": "data2"}, {"key": "data3" } ] }

请注意,“categories”对象是一个可以简单地用 for 循环解析的数组。 但是,在 PHP 中,关联数组中似乎不可能有相同的键。所以我不能将上面的结构作为json_encode的结果,我必须有“key1”、“key2”、“key3”,这使我无法简单地用Javascript中的for循环解析它。

编辑:修正 JSON 语法 EDIT2:所有数据都不同。键是相同的。

【问题讨论】:

  • 您显示的不是有效的 JSON。如果您想生成无效的 JSON(我想不出您可能想要这样做的原因),您需要编写自己的编码器/解码器
  • [] 应该是 {},因为只有存在 [] 的值才能存在
  • 只需稍微改变你的 json 就可以了:{"categories" : [ {"key": "data"},{ "key": "data"},{"key": "data"} ] }
  • @OzanKurt 否,那么最后一个值将覆盖以前的值。这根本无效。
  • @Jon 请参阅JSONLint 或类似项目。短:你不能那样做。如果您想使用相同的密钥,请使用用于 {"cat":{"key":["item1","item2"]}} 的数组

标签: javascript php arrays json


【解决方案1】:

使用 php json_encode() 函数将 PHP 数组转换为 JSON 字符串。

反转:json_decode()

例子:

<?php

$json = '{"categories" : { "key1": {"first":"1. value"}, "key2": "data", "key3": "data" } }';

$array = json_decode($json,true);
echo "<pre>";
print_r($array);
echo "</pre>";

将输出:

Array
(
    [categories] => Array
        (
            [key1] => Array
                (
                    [first] => 1. value
                )

            [key2] => data
            [key3] => data
        )

)

【讨论】:

    【解决方案2】:
    $array = [
        'categories' => [
            ['key' => 'data'],
            ['key' => 'data'],
            ['key' => 'data']
        ]
    ];
    
    echo json_encode($array);
    

    这与您的 JSON 中的数组结构相同。 JSON 对唯一键的规则与 PHP 相同。

    (此处使用 PHP 5.4+ 数组语法。)

    【讨论】:

      【解决方案3】:

      应该直截了当:

      echo json_encode([
        'categories' => [
          ['key' => 'data'],
          ['key' => 'data'],
          ['key' => 'data'],
        ],
      ]);
      

      此外,您可以通过以下方式简单地对结构进行逆向工程:

      $str = '{"categories" : [ {"key": "data1"}, {"key": "data2"}, {"key": "data3" } ] }';
      $arr = json_decode($str);
      
      var_export($arr);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多