Как мне обработать ключ, который может иметь значение объекта или массива? - PullRequest
0 голосов
/ 24 мая 2011

В настоящее время у меня есть некоторый код, который получает 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. Затем $ state становится каждым ключом в объекте Deeper. Например, $ state-> a не будет существовать до позиции 7. Можно ли как-нибудь преобразовать глубже из объекта JSON в массив, если число глубже равно единице?

Надеюсь, это поможет проиллюстрировать мою проблему:

"NewDataSet": {
        "Deeper": [
            {
                "a": "112",
                "b": "1841"
            },
            {
                "a": "111",
                "b": "1141"
            }
        ]
    }
}

против

"NewDataSet": {
        "Deeper":
            {
                "a": "51",
                "b": "12"
            }
}

конвертируется выше в

"NewDataSet": {
      "Deeper": [
           {
               "a": "51",
               "b": "12"
           }
       ]
}

было бы здорово. Я не знаю, как это сделать

1 Ответ

1 голос
/ 24 мая 2011

До

foreach ($decoded_json->NewDataSet->Deeper 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->Deeper в массив, тогда:

if (!is_array($decoded_json->NewDataSet->Deeper)) {
    $decoded_json->NewDataSet->Deeper = array($decoded_json->NewDataSet->Deeper);
}

foreach ($decoded_json->NewDataSet->Deeper as $state) {
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...