Php 我应该如何处理可能具有对象或数组值的键?
我目前有一些代码从一个站点获取一些JSON。这基本上就是我目前所做的Php 我应该如何处理可能具有对象或数组值的键?,php,json,parsing,Php,Json,Parsing,我目前有一些代码从一个站点获取一些JSON。这基本上就是我目前所做的 $valueObject = array(); if (isset($decoded_json->NewDataSet)) { foreach ($decoded_json->NewDataSet->Deeper as $state) { $i = count($valueObject); $valueObject[
$valueObject = array();
if (isset($decoded_json->NewDataSet)) {
foreach ($decoded_json->NewDataSet->Deeper as $state) {
$i = count($valueObject);
$valueObject[$i] = new ValueObject();
$valueObject[$i]->a = $state->a;
}
现在,当只有一个“更深层次”时,问题就出现了。服务器将其作为JSON对象返回$然后,状态成为更深层对象中的每个键$例如,状态->a直到位置7左右才会存在。当deep的计数为1时,有没有办法将deep从JSON对象转换为数组
希望这有助于说明我的问题:
"NewDataSet": {
"Deeper": [
{
"a": "112",
"b": "1841"
},
{
"a": "111",
"b": "1141"
}
]
}
}
对
"NewDataSet": {
"Deeper":
{
"a": "51",
"b": "12"
}
}
将上面的转换为
"NewDataSet": {
"Deeper": [
{
"a": "51",
"b": "12"
}
]
}
那太好了。我以前不知道怎么做
foreach($decoded\u json->NewDataSet->detached as$state)
您可能想:
if (is_array($decoded_json->NewDataSet)) {
// This is when Deeper is a JSON array.
foreach ($decoded_json->NewDataSet->Deeper as $state) {
// ...
}
} else {
// This is when Deeper is a JSON object.
}
更新如果您只想将
$decoded_json->NewDataSet->deep
放入一个数组中,那么:
if (!is_array($decoded_json->NewDataSet->Deeper)) {
$decoded_json->NewDataSet->Deeper = array($decoded_json->NewDataSet->Deeper);
}
foreach ($decoded_json->NewDataSet->Deeper as $state) {
// ...
}
也许我想在这里简单一点,但是为什么不转换成数组呢?否则,只需检查其是否为对象或array@Hannes:当count()返回一时,我想将其转换为数组。这就是我要找的,我不知道怎么做。count($json->NewDataSet->deep)==1表示对象。问题是,当我填充一个30字段值的对象时,我不想复制它。+1这基本上就是我一直在做的,除了使用is_数组进行清理。我将创建一个私有函数来帮助填充传递的ValueObject。谢谢你所说的,它适用于更多的特性,然后更深入,你想要一个解决方案,嗯,能“抓住所有特性”?