Я уже давно здесь и надеюсь, что все еще понимаю правила ». Недавно я начал изучать PHP и WordPress для интеграции чат-бота WhatsApp. Я создал на своем сайте WordPress веб-перехватчик, который возвращает JSON, который используется Google Dialogflow (движком чат-бота).
Например, мой веб-перехватчик возвращает что-то вроде этого
{
"fulfillmentMessages": [
{
"text": {
"text": [
"Text response from webhook"
]
}
}
]
}
Чтобы достичь этой структуры, я написал, что использовал этот вложенный ассоциативный массив
$innerarr= array();
$innerarr[0] = "Text response from webhook";
$newarr = array();
$newarr["fulfillmentMessages"]= array();
$newarr["fulfillmentMessages"][0] = array("text"=>array("text"=>$innerarr));
echo json_encode($newarr);
Это работает, но я тоже думаю, стоит ли мне
- Использовать вместо этого определение класса, которое управляет указанным выше?
- Использовать объект stdClass для динамического создания этой структуры?
- Есть ли более аккуратный способ сделать это, поскольку динамические свойства будут расти в зависимости от запроса от чат-бота?
- Я слишком много думаю?
2 ответа
Можете ли вы использовать инструмент конвертера, который поможет вам понять структуру преобразования, например: wtools.io. В этом случае структура массива PHP для вашего json похожа на:
$innerarr = array (
'fulfillmentMessages' =>
array (
0 =>
array (
'text' =>
array (
'text' =>
array (
0 => 'Text response from webhook',
),
),
),
),
);
echo json_encode($innerarr);
или, используя массивы сортировки:
$innerarr = [
'fulfillmentMessages' => [
0 => [
'text' => [
'text' => [
0 => 'Text response from webhook',
],
],
],
],
];
echo json_encode($innerarr);
Ваш расплывчатый образец показывает, что вы вставляете в структуру только одно текстовое сообщение.
- Я не вижу веских причин объявлять переменные в вашем примере скрипта.
- Также нет никакой пользы в создании объектов, потому что
json_encode()
будет использовать тот же синтаксис при преобразовании данных в строку json.
Я рекомендую вам отказаться от одноразовых переменных и написать необходимую структуру прямо в json_encode()
вызов.
Код: (Демо с JSON_PRETTY_PRINT
для удобочитаемости)
echo json_encode(
[
'fulfillmentMessages' => [
[
'text' => [
'text' => [
'Text response from webhook',
]
]
]
]
]
);
Я не могу посоветовать «динамические свойства будут расти в зависимости от запроса от чат-бота«потому что вы не совсем поняли, как будут выглядеть эти данные. Запрашивать» Общие рекомендации «не по теме CodeReview.
Вы предложили два альтернативных подхода, но я не уверен, что вы предоставили обзор. Почему
$innerarr
хорошее имя переменной для всего набора данных?— микмакуса