Ошибка count () при публикации данных JSON в API с использованием PHP - PullRequest
0 голосов
/ 07 ноября 2018

Я получил некоторые данные в PHP и пытаюсь опубликовать в API, который имеет данные в формате JSON. Но когда я публикую данные, я получаю сообщение об ошибке count (): параметр должен быть массивом или объектом, который реализует Countable в LINE 428 , я работаю над версией 7.2.2 XAMPP и после проверки онлайн я изменил версию на 5.6, но ошибка все еще сохраняется.

Пример данных, требуемых API

{"quote_id":112,
"country_residence":"Spain",
"physical_address":"*********",
"kra":"***********",
"policy_origin":"***********",
"policy_destination":"*********",
"with_spouse":1,
"spouse_id_passport":"B2345",
"spouse_name":"Spouse Name",
"spouse_dob":"1995-10-09",
"with_nok":1,
"nok_relation":"Son",
"nok_name":"NOK Full Names",
"nok_physical_address":"Physical address",
"nok_phone":"254**********",
"nok_email":"email2email.com",
"with_children":1,
"children":[
    {"child_name":"abc","child_dob":"2015-05-23"}
  ]

}

Мои данные PHP вместе с CURL

 array:18 [
      "quote_id" => 355
      "country_residence" => "297"
      "physical_address" => "MMNMNMNM"
      "kra" => "A123456789P"
      "policy_origin" => "297"
      "policy_destination" => "375"
      "with_spouse" => 1
      "spouse_id_passport" => "A1234567"
      "spouse_name" => "Martin"
      "spouse_dob" => "1977-02-09"
      "with_nok" => 1
      "nok_relation" => "Son"
      "nok_name" => "MNMNMN"
      "nok_physical_address" => "MMNMNMNM"
      "nok_phone" => "MNMNMN"
      "nok_email" => "NMMNMMNMNN"
      "with_children" => 1
      "children" => "{"child_name":"martin","child_dob":"2018-10-30"}"
    ]

//Call the curl function posting the data
$res = $this->global_Curl($data, 'api/travel/save-policy-meta');

//Curl function
    public function global_Curl($data, $url)
    {
        //dd($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, ('http://digital.***********' . '/' . $url));
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        //Prevents usage of a cached version of the URL
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 
        $response = json_decode(curl_exec($ch));
        curl_close($ch);
        // Log::debug($response);
        return $response;
    }

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

В ожидаемом выходе ...

"children":[
    {"child_name":"abc","child_dob":"2015-05-23"}
  ]

Предполагается, что у вас есть массив дочерних объектов, поэтому это массив массивов. Поскольку вы добавляете только один дочерний элемент, вам нужно заключить его во второй массив (обратите внимание на дополнительный набор [] вокруг значения) ...

 $children = [['child_name' => $childname , 'child_dob' => $childdob]];

Я думаю, что идея в том, что если бы у вас было несколько дочерних элементов, они могли бы проходить через них ...

 $children = [['child_name' => $childname , 'child_dob' => $childdob],
       ['child_name' => $childname2 , 'child_dob' => $childdob2],
       ['child_name' => $childname3 , 'child_dob' => $childdob3]];

Добавьте это в свой массив, используя ...

$array = array(
      "quote_id" => 355,
      "country_residence" => "297",
      "physical_address" => "MMNMNMNM",
      "kra" => "A123456789P",
      "policy_origin" => "297",
      "policy_destination" => "375",
      "with_spouse" => 1,
      "spouse_id_passport" => "A1234567",
      "spouse_name" => "Martin",
      "spouse_dob" => "1977-02-09",
      "with_nok" => 1,
      "nok_relation" => "Son",
      "nok_name" => "MNMNMN",
      "nok_physical_address" => "MMNMNMNM",
      "nok_phone" => "MNMNMN",
      "nok_email" => "NMMNMMNMNN",
      "with_children" => 1,
      "children" => $children,
    );
header('Content-Type: application/json');
echo json_encode($array);
0 голосов
/ 07 ноября 2018

Ваш массив "children" в вашем основном массиве не похож на массив. Измените его формат массива. Мол,

array("child_name" => "martin", "child_dob" => "2018-10-30")

Также я не вижу ',' разделяющих элементы массива. EDIT

Я не знаю, что вы подразумеваете под array:18. Но если вы используете count () или json, параметр должен быть массивом. Как,

$array = array(
      "quote_id" => 355,
      "country_residence" => "297",
      "physical_address" => "MMNMNMNM",
      "kra" => "A123456789P",
      "policy_origin" => "297",
      "policy_destination" => "375",
      "with_spouse" => 1,
      "spouse_id_passport" => "A1234567",
      "spouse_name" => "Martin",
      "spouse_dob" => "1977-02-09",
      "with_nok" => 1,
      "nok_relation" => "Son",
      "nok_name" => "MNMNMN",
      "nok_physical_address" => "MMNMNMNM",
      "nok_phone" => "MNMNMN",
      "nok_email" => "NMMNMMNMNN",
      "with_children" => 1,
      "children" => $children,
    );
...