Я получаю данные JSON от API по каждому запросу, но я не уверен, как его разобрать. Некоторые поля в этом формате JSON будут всегда присутствовать, тогда как другие являются взаимозаменяемыми. Ниже приведены примеры для пояснения.
$json1 = '{
"update_id": 12345,
"message": {
"message_id": 12,
"from": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"chat": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"date": 1440592506,
"text": "dummy"
}
}';
$json2 = '{
"update_id": 12345,
"message": {
"message_id": 13,
"from": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"chat": {
"id": 12345,
"first_name": "Foo",
"last_name": "Foo",
"username": "foo"
},
"date": 1440619228,
"sticker": {
"width": 510,
"height": 512,
"thumb": {
"file_id": "dasdsdasd",
"file_size": 6204,
"width": 127,
"height": 128
},
"file_id": "adasds",
"file_size": 39518
}
}
}';
Поскольку вы заметили, что поля в объекте сообщения, такие как message_id, из и в чате, одинаковы, тогда как последнее может быть чем-то вроде текста, стикера, фотографии, аудио и т.д. (Каждый из них - отдельные классы, и мне нужно создать объект и инициализировать его свойства, заданные полями объекта сообщения). В дополнение к этому могут быть дополнительные (необязательные) поля. И поэтому я не могу использовать следующий подход для синтаксического анализа:
$json_decoded = json_decode($json);
$updateID = $json_decoded->update_id;
$messageObject = $json_decoded->message;
$messageID = $messageObject->message_id;
$fromUserObject = $messageObject->from;
$date = $messageObject->date;
$chatObject = $messageObject->chat;
$userID = $fromUserObject->id;
$userFirstName = $fromUserObject->first_name;
$userLastName = $fromUserObject->last_name;
$userName = $fromUserObject->username;
Я видел несколько примеров, когда люди используют foreach loops для синтаксического анализа целых данных, но я не нашел его применимым в этом случае (или я просто не мог применить этот подход).
Я был бы очень признателен за ваши предложения и рекомендации по разбору этих данных.
Эта функция проверяет, существует ли данное свойство в указанном классе.
В случае объекта устанавливается свойство use или передается ''//empty
$messageID = property_exists($messageObject->message_id) ? $messageObject->message_id: '' ;
В случае массива
$json_decoded = json_decode($json,true);
$messageID = isset($messageObject['message_id']) ? $messageObject['message_id'] : '' ;