将另一个对象转换为json的多维对象
问题描述:
我有一个对象需要转换为json以便与API交互,因此我必须维护对象和数组结构。看看下面:将另一个对象转换为json的多维对象
stdClass Object
(
[method] => something
[params] => Array
(
[instructions] => stdClass Object
(
[a] => 1
[b] => 2
)
)
)
它传递给json_encode()
但第二个对象instructions
已被丢失,只是把它变成另一个数组:
{ "method":"something",
"params":{
"instructions": { "a":1,"b":2 }
}
}
当我应该结束了,方括号指令等:
{ "method":"something",
"params":{
"instructions": [ { "a":1,"b":2 } ]
}
}
我注意到有一个像JSON_FORCE_OBJECT这样的预定义常量,但添加了json_encode作为选项似乎有0效果。我错过了什么?
答
您的instructions
要求是对象(即你使用[ { } ]
表达)的阵列,但将其设置为仅具有两个字段中的对象。请尝试以下操作:
$arr = (object)[
'method' => 'something',
'params' => [
'instructions' => [
[
'a' => 1,
'b' => 2
]
]
]
];
echo json_encode($arr);
输出:
{
"method": "something",
"params": {
"instructions": [
{
"a": 1,
"b": 2
}
]
}
}
+0
BOOM!我懂了。今天学到了一些新东西,然后介绍如何在php中构建对象。谢谢 – Bob
答
首先,json_encode工作得很好:
$x = (object) [
"method" => "something",
"params" => [
"instructions" => (object) [
"a" => 1,
"b" => 2
]
]
];
echo json_encode($x);
// {"method":"something","params":{"instructions":{"a":1,"b":2}}}
这是不是有效的JSON
"instructions": [ "a":1,"b":2 ]
有作为根据关联数组在JavaScript
没有这样的事你的评论和编辑你想改变阵列为
$x = (object) [
"method" => "something",
"params" => [
"instructions" => [
(object) [
"a" => 1,
"b" => 2
]
]
]
];
json_encode适当做。指令是一个对象,而不是一个数组,为什么它应该作为一个数组出现? –
没错。但我不知道我没有正确构建我的php对象。这就是为什么我说我的输出应该是最终结果的原因。 – Bob