#php #json #parsing
#php #json #синтаксический анализ
Вопрос:
В настоящее время у меня есть некоторый код, который использует некоторый 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 становится каждым ключом в более глубоком объекте. $ state-> a не будет существовать, например, до позиции 7. Есть ли какой-либо способ, которым я мог бы преобразовать Deeper из объекта JSON в массив, когда количество deeper равно единице?
Надеюсь, это поможет проиллюстрировать мою проблему:
"NewDataSet": {
"Deeper": [
{
"a": "112",
"b": "1841"
},
{
"a": "111",
"b": "1141"
}
]
}
}
против
"NewDataSet": {
"Deeper":
{
"a": "51",
"b": "12"
}
}
преобразование выше в
"NewDataSet": {
"Deeper": [
{
"a": "51",
"b": "12"
}
]
}
было бы здорово. Я не знаю, как это сделать
Комментарии:
1. возможно, я думаю, что здесь все просто, но почему бы не выполнить преобразование в array? В противном случае просто проверьте, является ли это объектом или массивом
2. @Hannes: Когда count () возвращает единицу, я хотел бы преобразовать ее в массив. Это то, что я ищу, я не знаю, как это сделать. count($json-> NewDataSet-> Deeper) == 1 означает объект. Проблема в том, что когда я заполняю объект со значением 30 полей, я не хочу его копировать.
Ответ №1:
Перед
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) {
// ...
}
Комментарии:
1. 1 Это, по сути, то, что я делал, за исключением очистки с помощью is_array . Я просто создам закрытую функцию, которая поможет заполнить переданный ValueObject. Спасибо
2. итак, то, что вы говорите, применяется к большему количеству возможностей, чем глубже, и вы получаете решение, которое, хм, «улавливает их все»?