Json_encode()处理带有字符串键的对象



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

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

然而,我遇到的问题是,当我使用json_encode返回JSON数组时。每个"Children"数组被打印为一个对象,而不是一个数组——如下面的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"
                }
            }
        },

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

编辑: JSON应该是这样的(方括号很重要!):

[
{
    "ID": "101",
    "ParentID": "0",
    "Name": "Root One",
    "Children": [
        {
            "ID": "102",
            "ParentID": "101",
            "Name": "Child One",
            "Children": [

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

["foo", "bar", "baz"]

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

PHP将列表和键值存储合并为一个array数据类型。JSON不。

这是你的对象:

$parent=new StdClass();
$parent->ID=101;
$parent->ParentID=0;
$parent->Name='Root One';
$child1=new StdClass();
$child1->ID=1011;
$child1->ParentID=$parent->ID;
$child1->Name='Child One';
$parent->Children[]=$child1;

$child1_1=new StdClass();
$child1_1->ID=10111;
$child1_1->ParentID=$child1->ID;
$child1_1->Name='Child One One';
$child1->Children[]=$child1_1;    
这是你的JSON转换函数:
echo json_encode($parent,JSON_PRETTY_PRINT);

,这是你的对象编码成JSON格式:

{
    "ID": 101,
    "ParentID": 0,
    "Name": "Root One",
    "Children": [
        {
            "ID": 1011,
            "ParentID": 101,
            "Name": "Child One",
            "Children": [
                {
                    "ID": 10111,
                    "ParentID": 1011,
                    "Name": "Child One One"
                }
            ]
        }
    ]
}

答案来得比较晚,因为我学习PHP的时间比较晚。不管怎样,总有一天,有人会发现它很有用。

我现在有一个工作的解决方案,这是快速和工作良好。

  1. 首先,按SO中所写的链接提问;

    在JSON中,数组只有数字键,而对象有字符串属性。数组键的包含强制整个外部结构必须是对象

    在JSON

    ;花括号保存对象({}),方括号保存数组([])。

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

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

http://php.net/manual/en/function.json-decode.php

设置json_decode的第二个参数为true,以至少获得关联数组

除此之外:javascript不能处理非顺序/非连续的数组索引,所以只要id不是顺序的,json就没有其他选择将其转换为"字符串"索引。

相关内容

  • 没有找到相关文章

最新更新