创建包含mySQL数据源中的数组和对象的JSON

时间:2013-10-27 19:12:30

标签: php mysql arrays json object

我正在尝试创建存储在mySQL中的数据的JSON表示。

我正在尝试记录RESTful API。

我正在使用PHP的json_encode()函数。

我有一个包含

等数据的表格

1)名字 2)父母 3)data_type(对象/数组/字符串/数字以匹配JSON数据类型) 4)价值

我正在尝试创建一个通用函数,它允许我通过简单地将数据添加到mySQL数据库来构建这些JSON字符串。

我遇到了使用对象和数组的问题。

例如,JSON应该是:

{
"sessionToken":"","roleName":""
,"data":[
                {
                    "methodTypes":[""] , "objects":[""]
                }
            ]
}

然而它出现了:

{
    "sessionToken":"","roleName":""
    ,"data":[
                {
                "methodTypes":[""]
            }
            ,{
                "objects":[""]
                }
            ]
}

这表明我的代码是因为某种原因我的代码是为methodType和对象添加一个对象,因为它应该只在单个对象中。

我试图首先创建一个包含methodTypes和对象的数组。 然后我以$ objects-> $ A的格式创建一个对象,并使其与第一步中创建的数组相等。 然后我添加到JSON生成的主数据数组。

我一直在搜索显示JSON用法示例的示例,当在同一个JSON中需要数组和对象时没有成功。

非常感谢任何正确指示的指针。

更新#1:

正在馈送到json_encode()的数组的var_dump是:

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=>     array(2) { [0]=> array(1) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } } [1]=>     array(1) { ["objects"]=> array(1) { [0]=> string(0) "" } } } }

在那里,好像我采用一个已知的好JSON并执行json_decode(),然后var_dump看起来像:

object(stdClass)#3 (3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> object(stdClass)#4 (2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> array(2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

如果我将其设置为TRUE则返回数组而不是对象。

1 个答案:

答案 0 :(得分:1)

编辑以提供所需的输出

$data = ['sessionToken' => '',
    'roleName' => '',
    'data' => [['methodTypes' => [''], 'objects' => ['']]]
];

它产生了。这是有效的,因为我将关联数组包装在一个非关联数组

{"sessionToken":"","roleName":"","data":[{"methodTypes":[""],"objects":[""]}]}

修改

有关json_encode的更多信息 Javascript数组仅包含数字键。期。如果你看起来像一个关联数组,它实际上是一个JS对象(可以使用括号引用,即var['name']var.name是等价的。)

由于json_encode无法在JSON中创建关联数组,因此它将关联的PHP数组转换为对象。所以你可以在上面的例子中看到,我得到的是一个对象而不是一个数组,除非我没有指定键。

echo json_encode(['name' => 'value']);

产量

{"name":"value"}

虽然

echo json_encode(['value']);

产量

["value"]