Я публикую некоторые данные в 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),
Что я могу сделать, чтобы исправить это, но в то же время сохранить чистый и ясный код?