Переменная PHP выдает правильную строку, но выдает ошибку JSON

#php #json #curl #php-curl

#php #json #curl #php-curl

Вопрос:

Я создал следующий скрипт, который выдает строку, которую я позже использую в ответе JSON. Однако она выдает ошибку, несмотря на то, что она отформатирована правильно. Что странно, если я скопирую вывод переменной непосредственно в скрипт, он работает просто отлично.

     $vls_minidbqs = 'Apples;Oranges;Bananas'
    $vls_dbqs = explode(";", $vls_minidbqs);
    if (!empty($vls_dbqs[0])) {
    $dbq0 = '"'.$vls_dbqs[0].'",rn ';
      }else{
    $dbq0 = '';
    }
    if (!empty($vls_dbqs[1])) {
    $dbq1 = '"'.$vls_dbqs[1].'",rn ';
      }else{
    $dbq1 = '';
    }
    if (!empty($vls_dbqs[2])) {
    $dbq2 = '"'.$vls_dbqs[2].'",rn ';
      }else{
    $dbq2 = '';
    }
    if (!empty($vls_dbqs[3])) {
    $dbq3 = '"'.$vls_dbqs[3].'",rn ';
      }else{
    $dbq3 = '';
    }
    if (!empty($vls_dbqs[4])) {
    $dbq4 = '"'.$vls_dbqs[4].'",rn ';
      }else{
    $dbq4 = '';
    }
    if (!empty($vls_dbqs[5])) {
    $dbq5 = '"'.$vls_dbqs[5].'",rn ';
      }else{
    $dbq5 = '';
    }
    if (!empty($vls_dbqs[6])) {
    $dbq6 = '"'.$vls_dbqs[6].'",rn ';
      }else{
    $dbq6 = '';
    }
    if (!empty($vls_dbqs[7])) {
    $dbq7 = '"'.$vls_dbqs[7].'",rn ';;
      }else{
    $dbq7 = '';
    }
    if (!empty($vls_dbqs[8])) {
    $dbq8 = '"'.$vls_dbqs[8].'",rn ';
      }else{
    $dbq8 = '';
    }
    if (!empty($vls_dbqs[9])) {
    $dbq9 = '"'.$vls_dbqs[9].'",rn ';
      }else{
    $dbq9 = '';
    }
    $vls_dbqs = 'rn '.$dbq0.''.$dbq1.''.$dbq2.''.$dbq3.''.$dbq4.''.$dbq5.''.$dbq6.''.$dbq7.''.$dbq8.''.$dbq9.'';
    $vls_dbqs = substr($vls_dbqs, 0,strrpos($vls_dbqs,","));
    $vls_dbqs = $vls_dbqs.'rn';
  

Этот код выдает следующую строку:
r n «Яблоки», r n «Апельсины», r n «Бананы» r n

JSON выполняет следующее. Что странно, если я скопирую и вставлю строку непосредственно в код, в который она идет, или удалю переменную, через которую она проходит, без проблем: r n «Яблоки», r n «Апельсины», r n «Апельсины» r n

Все остальные переменные, которые я передаю, работают. Это проблема с кодировкой?

Вот код PHP / CURL, который я использую (рассматриваемый раздел «Fruit»: [$vls_dbqs], r n):

 curl_setopt_array($curl, array(
  CURLOPT_URL => "https://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>"{rnt"data": [rn        {rn            "Owner": {rn                "name": "XXXXXXXX",rn                "id": "XXXXXXXXXXXXXXXXXXXXX",rn                "email": "XXXXX@XXXXX.com"rn            },rn            "Mailing_State": "$vls_mailingstate",rn            "Affiliate": "XXXXXXX",rn            "Mailing_Apt_Unit": "$vls_apt",rn            "Services_Needed": "$vls_servicesneeded",rn            "DBQ_State": "$vls_mailingstate",rn            "Vet_also_Service_Connected_for": "$vls_alsosc",rn            "Affiliate_Email": "XXXXX@XXXXX.com",rn            "Mailing_Street": "$vls_mailingstreet",rn            "Co_Owner": {rn                "name": "XXXXXXXXX XXXX",rn                "id": "2922631000001654004"rn            },rn            "Full_Name": "$vls_first_name $vls_last_name",rn            "Disability_7": "$vls_disability7",rn            "Disability_8": "$vls_disability8",rn           "Disability_3": "$vls_disability3",rn            "Disability_4": "$vls_disability4",rn             "Disability_5": "$vls_disability5",rn            "Disability_6": "$vls_disability6",rn            "Veteran_Review": "$vls_veteran_review",rn            "Overall_Rating": "$vls_overallrating",rn            "Fruit": [$vls_dbqs],rn            "Vet_Overseas": "No",rn            "Layout": {rn                "name": "Standard",rn                "id": "2922631000000091033"rn            },rn            "Lead_Source": "VetLink Solutions",rn            "Disability_1": "$vls_disability1",rn            "Disability_2": "$vls_disability2",rn            "Email": "$vls_email",rn            "Vet_Right_or_Left_Handed": [rn                "$vls_dominatehand"rn            ],rn            "ITF_Date": "$vls_itf",rn            "Multi_Select_3": [rn                "$vls_gender"rn            ],rn            "Mailing_Zip": "$vls_mailingzip",rn            "First_Name": "$vls_first_name",rn            "Phone": "$vls_phone",rn                        "Date_of_Birth": "$vls_dob",rn            "Mailing_City": "$vls_mailingcity",rn            "Middle": "$vls_middle_name",rn            "SSN": "$vls_ssn",rn            "Expedite2": "No",rn            "Last_Name": "$vls_last_name",rn            "Account_Status": "XXXXXX - New Client"rn        }rn    ]rn}",
  CURLOPT_HTTPHEADER => array(
    "Authorization: Zoho-oauthtoken $refresh_token",
    "Content-Type: application/json"
  ),
));

$response = curl_exec($curl);
curl_close($curl);
  

Спасибо за чтение.

Комментарии:

1. Строка json не должна иметь эти разрывы строк и табуляции. Но вместо того, чтобы пытаться вручную генерировать данные json самостоятельно, просто создайте массив с правильным форматом и запустите его через json_encode() , чтобы превратить его в действительный json. Способ проще и менее подвержен ошибкам.

2. ваш код действительно слишком плох для запуска

3. Используйте эти 2 строки кода, чтобы преобразовать его в json $arr = array('Apples', 'Oranges', 'Bananas', 'four'); echo json_encode($arr, JSON_PRETTY_PRINT);

4. @NalinNishant Спасибо, это сделало свое дело. Я знал, что в этом случае я проделал долгий путь вокруг шины. Спасибо за ответ!