Не удалось отправить POST-запрос вложенного многомерного объекта json в PHP, поскольку многомерный json поврежден при преобразовании его в массив

У меня есть вложенный многомерный объект json, и я хочу сделать почтовый запрос с этим json но я не нашел прямого способа отправить почтовый запрос с этим json, потому что я не нашел способа объявить объект json в php, и даже я не могу преобразовать этот json_object в массив из-за поврежденных опубликованных данных

json_object = {
    "messages": {
        "authentication": {
            "productToken": "your product token"
        },
        "msg": [{
            "body": {
                "type": "auto",
                "content": "Fallback Text for SMS"
            },
            "to": [{
                "number": "00316012345678"
            }],
            "from": "00316098765432",
            "allowedChannels": ["WhatsApp"],
            "richContent": {
                "conversation": [{
                    "text": "A text message with *bold* formatting in a speech bubble."
                }, {
                    "text": "Another speech bubble"
                }, {
                    "media": {
                        "mediaName": "and an image",
                        "mediaUri": "https://www.cm.com/cdn/web/nl-nl/blog/conversational-commerce.jpg",
                        "mimeType": "image/jpeg"
                    }
                }]
            }
        }]
    }
}

я хочу сделать почтовый запрос с этим json_object, но я не могу объявить объект json в php, поэтому я должен преобразовать мой json_object в массив, но я не смог преобразовать этот json_object в массив без повреждения данных запроса

это мой код

$data = http_build_query($json_object);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = curl_exec($ch);
if ($e = curl_error($ch)) {
    echo $e;
}
else {
    $decoded=json_decode($resp);
    foreach($decoded as $key => $val) {
        echo $key  . ':'. $val. '<br>';
    }
}
curl_close($ch);

Может ли кто-нибудь помочь мне отправить этот почтовый запрос, пожалуйста?

Добро пожаловать в Stack Overflow. Вы можете использовать json_encode(). Является ли $json_object строкой?

Twisty 20.03.2022 21:10

Кроме того, ваш объект JSON верен. Основная проблема, которую я получаю, заключается в следующем: Объект класса stdClass не удалось преобразовать в строку.$val будет объектом и не может быть преобразован в строку для эха.

Twisty 20.03.2022 21:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рассмотрим следующий пример.

<?PHP
  $json_object = '{
    "messages": {
        "authentication": {
            "productToken": "your product token"
        },
        "msg": [{
            "body": {
                "type": "auto",
                "content": "Fallback Text for SMS"
            },
            "to": [{
                "number": "00316012345678"
            }],
            "from": "00316098765432",
            "allowedChannels": ["WhatsApp"],
            "richContent": {
                "conversation": [{
                    "text": "A text message with *bold* formatting in a speech bubble."
                }, {
                    "text": "Another speech bubble"
                }, {
                    "media": {
                        "mediaName": "and an image",
                        "mediaUri": "https://www.cm.com/cdn/web/nl-nl/blog/conversational-commerce.jpg",
                        "mimeType": "image/jpeg"
                    }
                }]
            }
        }]
    }
}';
$decoded = json_decode($json_object);
foreach($decoded as $key => $val) {
    echo "$key: " . serialize($val) . '<br>';
}
?>

Результат будет следующим:

messages: O:8:"stdClass":2:{s:14:"authentication";O:8:"stdClass":1:{s:12:"productToken";s:18:"your product token";}s:3:"msg";a:1:{i:0;O:8:"stdClass":5:{s:4:"body";O:8:"stdClass":2:{s:4:"type";s:4:"auto";s:7:"content";s:21:"Fallback Text for SMS";}s:2:"to";a:1:{i:0;O:8:"stdClass":1:{s:6:"number";s:14:"00316012345678";}}s:4:"from";s:14:"00316098765432";s:15:"allowedChannels";a:1:{i:0;s:8:"WhatsApp";}s:11:"richContent";O:8:"stdClass":1:{s:12:"conversation";a:3:{i:0;O:8:"stdClass":1:{s:4:"text";s:57:"A text message with *bold* formatting in a speech bubble.";}i:1;O:8:"stdClass":1:{s:4:"text";s:21:"Another speech bubble";}i:2;O:8:"stdClass":1:{s:5:"media";O:8:"stdClass":3:{s:9:"mediaName";s:12:"and an image";s:8:"mediaUri";s:65:"https://www.cm.com/cdn/web/nl-nl/blog/conversational-commerce.jpg";s:8:"mimeType";s:10:"image/jpeg";}}}}}}}<br>

Если есть определенная часть, к которой вы хотите обратиться, вам нужно будет нацелить ее из текущего объекта.

Если вам нужны определенные части, вам нужно выполнить много дополнительных шагов:

<?php
  $json_object = '{
    "messages": {
        "authentication": {
            "productToken": "your product token"
        },
        "msg": [{
            "body": {
                "type": "auto",
                "content": "Fallback Text for SMS"
            },
            "to": [{
                "number": "00316012345678"
            }],
            "from": "00316098765432",
            "allowedChannels": ["WhatsApp"],
            "richContent": {
                "conversation": [{
                    "text": "A text message with *bold* formatting in a speech bubble."
                }, {
                    "text": "Another speech bubble"
                }, {
                    "media": {
                        "mediaName": "and an image",
                        "mediaUri": "https://www.cm.com/cdn/web/nl-nl/blog/conversational-commerce.jpg",
                        "mimeType": "image/jpeg"
                    }
                }]
            }
        }]
    }
}';
$decoded = json_decode($json_object);
foreach($decoded->messages->msg as $message){
    echo "To: " . $message->to[0]->number . "<br>\r\n";
    echo "From: " . $message->from . "<br>\r\n";
    foreach($message->richContent->conversation as $val){
        if (isset($val->text)){
            $txt = preg_replace("#\*([^*]+)\*#", "<b>$1</b>", $val->text);
            echo  $txt . "<br>\r\n";
        } elseif (isset($val->media)) {
            if ($val->media->mimeType == "image/jpeg"){
                echo "<img src='{$val->media->mediaUri}' title='{$val->media->mediaName}'>\r\n";
            }
        }
    }
};

Это приводит к:

To: 00316012345678<br>
From: 00316098765432<br>
A text message with <b>bold</b> formatting in a speech bubble.<br>
Another speech bubble<br>
<img src = "https://www.cm.com/cdn/web/nl-nl/blog/conversational-commerce.jpg" title = "and an image">

Другие вопросы по теме