php - 来自 php 数组的意外 json 输出结构

标签 php json multidimensional-array arguments

我正在尝试转换动态数据。如何从 PHP 获取此 JSON:

/*JSON*/
{
   "122240cb-253c-4046-adcd-ae81266709a6": {
      "item": {
          "0": "3"
      }
   }
}

这就是我所做的,但它不起作用:

/*PHP*/

$json = array("122240cb-253c-4046-adcd-ae81266709a6"=> array(
    "item" => array($form_item)
));

echo json_encode($json, JSON_FORCE_OBJECT + JSON_PRETTY_PRINT);

这是我得到的结果,而不是上面的结果。

{
"122240cb-253c-4046-adcd-ae81266709a6": {
    "0": {
        "item": 3
    }
}

最佳答案

首先,用一些代码来演示需要调整的内容。

  1. item 键向上移动一级(从最低子数组中移出)
  2. 用引号包裹您的 $form_item 值,使其成为一个字符串。

代码:(Demo)

$form_item = 3;
$original_json = array("122240cb-253c-4046-adcd-ae81266709a6"=> array(
    array("item" => $form_item)
));
echo json_encode($original_json, JSON_FORCE_OBJECT + JSON_PRETTY_PRINT);

echo "\n---\n";

$form_item = "3";
$desired_json = array("122240cb-253c-4046-adcd-ae81266709a6"=> array(
    "item" => array($form_item)
));
echo json_encode($desired_json, JSON_FORCE_OBJECT + JSON_PRETTY_PRINT);

输出:

{
    "122240cb-253c-4046-adcd-ae81266709a6": {
        "0": {
            "item": 3
        }
    }
}
---
{
    "122240cb-253c-4046-adcd-ae81266709a6": {
        "item": {
            "0": "3"
        }
    }
}

现在进入更有趣的部分,乍一看让我感到困惑......

您正在使用我以前从未见过且未在 json_encode() documentation page 中提及的选项参数语法.您列出了多个 json constants并用 + 而不是手册中演示的管道 (|) 将它们分开。

为了解释为什么这是有效的语法,我必须表达“幕后”发生的事情。

常量实际上是“位掩码”。每个常量都分配了一个数字。

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256
JSON_PARTIAL_OUTPUT_ON_ERROR => 512
JSON_PRESERVE_ZERO_FRACTION => 1024

你看,这些数字不是随意分配的;每个累进数字都是前一个数字的两倍。为什么?因为如果你敢于列出多个选项,你可以写一个数字来表示任何两个或更多常量的总和,你永远不会意外地成为值(value)冲突的牺牲品。

这是什么意思?以下所有表达式都产生相同的输出:

echo json_encode($json, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT);
echo json_encode($json, JSON_FORCE_OBJECT + JSON_PRETTY_PRINT);
echo json_encode($json, 16 + 128);
echo json_encode($json, 144);

要证据吗? ( Demo )

关于php - 来自 php 数组的意外 json 输出结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248632/

相关文章:

java - 如何在 Kotlin 中解析 JSON?

javascript - 如何在 Javascript 中从新数组方法重写为文字数组方法

php - MongoDB:如何查询嵌套数组?

java - 如何将 txt 文件读入二维数组 Java

php - 如何使用 XHProf 从命令行分析 PHPUnit 测试?

php - MySQL 需要在 join 右表无值时显示 0,带累积

php - 如何查询简单机械论坛的主题流行度/评级

php - 在 MAMP 上安装 ffmpeg

c# - 将来自 API 的结果合并到一个对象中

python - 在 python 中迭代 JSON 对象