JSON объект в JSON массив в php - PullRequest
0 голосов
/ 02 мая 2020

Я публикую некоторые данные в API, используя curl в php. Значение CURLOPT_POSTFIELDS в первом фрагменте кода ( Works ) представляет собой строку, отформатированную как массив JSON. Это прекрасно работает, но я нахожу этот фрагмент кода очень грязным, и я ищу менее грязный способ форматирования данных. Поэтому я создал массив, как показано во втором фрагменте кода ( Не работает ), и перед тем, как связать его с CURLOPT_POSTFIELDS, я использую json_encode().

Теперь API отвечает следующая ошибка:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'SteamIO.WebUI.Areas.API.Models.CampaignRecord[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'CampaignRecords.ContextID', line 1, position 57.

Работает:

    CURLOPT_POSTFIELDS => "{\r\n\tImportSetupID: \"Test\",\r\n\t CampaignRecords: [\r\n\t\t{\r\n\t\t\tContextID: \"ExternalID1\",\r\n\t\t\tData: {\r\n\t\t\t\t\"id\" : \"Test\",\r\n\t\t\t\t\"ad_id\" : \"Test\",\r\n\t\t\t\t\"ad_name\" : \"Test\",\r\n\t\t\t\t\"adset_id\" : \"Test\",\r\n\t\t\t\t\"adset_name\" : \"Test\",\r\n\t\t\t\t\"campagne_name\" : \"Test\",\r\n\t\t\t\t\"telefoonnummer\" : \"".$tel."\",\r\n\t\t\t\t\"voornaam\" : \"".$name."\",\r\n\t\t\t\t\"achternaam\" : \"Test\",\r\n\t\t\t\t\"emailadres\" : \"Test\",\r\n\t\t\t}\r\n\t\t}\r\n\t]\r\n};\r\n",

Не работает:

$fields = array(ImportSetupID=> "Test",
                CampaignRecords => array(
                    ContextID => "ExternalID1",
                    Data => array(
                        "id" => "Test",
                        "ad_id" => "Test",
                        "ad_name" => "Test",
                        "adset_id" => "Test",
                        "adset_name" => "Test",
                        "campagne_id" => "Test",
                        "campagne_name" => "Test",
                        "form_id" => "Test",
                        "platform" => "Test",
                        "telefoonnummer" => "Test",
                        "voornaam" => "Test",
                        "achternaam" => "Test",
                        "emailadres" => "Test"
                    )
                )
            );
CURLOPT_POSTFIELDS => json_encode($fields),

Что я могу сделать, чтобы исправить это, но в то же время сохранить чистый и ясный код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...