Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该如何处理可能具有对象或数组值的键?_Php_Json_Parsing - Fatal编程技术网

Php 我应该如何处理可能具有对象或数组值的键?

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[

我目前有一些代码从一个站点获取一些JSON。这基本上就是我目前所做的

$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。谢谢你所说的,它适用于更多的特性,然后更深入,你想要一个解决方案,嗯,能“抓住所有特性”?