多维数组上的json_encode()-带字符串键

Pat*_*ick 5 php json multidimensional-array

我正在使用PHP创建一个非常大的多维数组。每个对象都包含名称,ID,ParentID和子级。子级是由更多相同格式的对象组成的数组。

命名每个对象的ID至关重要-这有助于我将每个对象放在正确的父对象下。(在下面的代码中,我使用101、102等)

但是,我遇到的问题是当我使用JSON返回数组时json_encode。每个“儿童”数组都将被打印为对象,而不是数组-如下面的JSON代码所示。

正如我在这里的另一个SO线程上所读到的那样,“它们是因为包含了字符串键而成为对象” –尽管它们是数字,但它们仍然是字符串。

{
"101": {
    "ID": "101",
    "ParentID": "0",
    "Name": "Root One"
    "Children": {
        "102": {
            "ID": "102",
            "ParentID": "101",
            "Name": "Child One"
        },
        "103": {
            "ID": "103",
            "ParentID": "101",
            "Name": "Child Two",
            "Children": {
                "104": {
                    "ID": "104",
                    "ParentID": "103",
                    "Name": "Child Child One"
                }
            }
        },
Run Code Online (Sandbox Code Playgroud)

有谁知道如何克服这个问题?

编辑: JSON应该看起来像这样(方括号很重要!):

[
{
    "ID": "101",
    "ParentID": "0",
    "Name": "Root One",
    "Children": [
        {
            "ID": "102",
            "ParentID": "101",
            "Name": "Child One",
            "Children": [
Run Code Online (Sandbox Code Playgroud)

dec*_*eze 5

JSON数组没有显式索引,它只是一个有序列表。具有命名键的唯一JSON数据结构是一个对象。文字应该使这一点很明显:

["foo", "bar", "baz"]
Run Code Online (Sandbox Code Playgroud)

数组没有命名索引,也没有添加任何规定。

PHP将列表和键值存储都压缩为一种array数据类型。JSON不会。

  • @mohammad *** PHP ***具有“关联数组”,*** JSON ***没有!JSON的“关联数组”称为*对象*。 (2认同)

Pat*_*ick 2

我现在有了一个快速且运行良好的可行解决方案。

  1. 首先,正如问题中的SO链接所写;

    在 JSON 中,数组仅具有数字键,而对象具有字符串属性。包含数组键迫使整个外部结构必然成为一个对象。

    在 JSON 中;大括号保存对象 ( {}),方括号保存数组 ( [])。

  2. 因此,使用字符串作为键将导致json_encode函数返回对象,而重置键将确保它创建数组。

  3. 因此,在返回 JSON 编码字符串之前,我运行一个函数来重置所有数组键。我在这个 SO 线程(重置多维数组中的数组键)上找到的代码特别有用!