Выбор типа данных для публикации в полезной нагрузке curl

#php #curl

Вопрос:

У меня есть приложение, к которому я хочу получить доступ через curl, и я делаю это с помощью api curl. Я вставляю документ с информацией, которая у меня есть. Документ принимает строку, геопункт и целое число 32/64.

Поскольку сервер является своего рода базой данных, можно ли решить, какой тип данных отправлять в качестве полезной нагрузки json, поскольку некоторые поля должны быть строками, а другие целыми числами

 <?php       
        
        $YOUR_API_KEY =  base64_encode("77777");

        $ch = curl_init();
        $payload = '{"property_owner_id":"'.$property_owner_id.'","property_name":"'.$property_name.'","property_country":"'.$property_country.'","property_address":"'.$property_address.'","property_city":"'.$property_city.'","property_star_rating":'$property_star_rating',"property_reviews_score":'$property_reviews_score',"property_price_per_night_usd":'$property_price_per_night_usd',"property_price_per_night_euro":'$property_price_per_night_euro',"property_price_per_night_pound":'$property_price_per_night_pound',"property_price_per_night_sfr":'$property_price_per_night_sfr',"property_price_per_night_auz":'$property_price_per_night_auz',"property_price_per_night_rem":'$property_price_per_night_rem',"property_price_per_night_yen":'$property_price_per_night_yen',"property_image":"'.$property_image.'","property_tv":"'.$property_tv.'","property_radio":"'.$property_radio.'","property_breakfast":"'.$property_breakfast.'","property_bed_type":"'.$property_bed_type.'","property_kitchennete":"'.$property_kitchennete.'","property_region":"'.$property_region.'","property_chain_name":"'.$property_chain_name.'","property_status":"'.$property_status.'","property_maximum_occupancy_capacity":'$property_maximum_occupancy_capacity',"property_remaining_occupancy_capacity":'$property_remaining_occupancy_capacity',"property_date_added":"'.$property_date_added.'","property_date_updated":"'.$property_date_updated.'","property_coordinates": ['$coordinates']}';
        $pe = json_encode($payload);
        curl_setopt($ch, CURLOPT_URL, 'http://localhost:8108/collections/mh_props/documents');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $pe);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_USERPWD, $YOUR_API_KEY . ':' . '');

        $headers = array();
        $headers[] = 'Content-Type: application/json';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Error:' . curl_error($ch);
        }
        curl_close ($ch);
 

Например

 "property_city":"'.$property_city.'","property_star_rating":'$property_star_rating',
 

$property_city должно быть строкой и $property_star_rating должно быть целым числом. Я подготовил некоторые данные, которые хранятся в $property_city виде строки и $property_star_rating целого числа.

Это эквивалент curl без php

 curl "http://localhost:8108/collections/mh_props/documents" -X POST 
        -H "Content-Type: application/json" 
        -H "X-TYPESENSE-API-KEY: " 
        -d '{"property_owner_id":"1","property_name":"Louvre Museuem","property_country":"", "property_address":"","property_city":"","property_star_rating":4,"property_reviews_score":6,"property_price_per_night_usd":100,"property_price_per_night_euro":120,"property_price_per_night_pound":130,"property_price_per_night_sfr":200,"property_price_per_night_auz":122,"property_price_per_night_rem":134,"property_price_per_night_yen":211,"property_image":"","property_tv":"","property_radio":"","property_breakfast":"","property_bed_type":"","property_kitchennete":"","property_region":"","property_chain_name":"","property_status":"","property_maximum_occupancy_capacity":23,"property_remaining_occupancy_capacity":20,"property_date_added":"","property_date_updated":"","property_coordinates": [48.86093481609114, 2.33698396872901]}'
 

Можно ли различать типы данных при публикации данных с помощью json?

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

1. Мне трудно понять сам вопрос. В Json число { a: 1 } против строки { a: "1" } кажется достаточным?

2. Я знаю , например "property_star_rating":"'.$property_star_rating.'", , что это целое число, как бы я его передал, так как, когда мы все кодируем, все строковое

3. Все еще не уверен, в чем вопрос. Думаю, @Jim указывает в правильном направлении, вы не должны создавать строки JSON, связываясь со строками, используйте встроенные функции php

Ответ №1:

Сначала создайте некоторый массив, содержащий ваши данные.

Например

 $a = ["key1" => 3, "key2" => "344"];
 

и сделайте что-нибудь json_encode($a) , что автоматически выполнит часть преобразования чисел/строк для вас

Результатом будет

 {"key1":3,"key2":"344"}
 

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

PS: JSON не заботится о сложных типах, таких как географические точки и т. Д. Поэтому вы всегда можете захотеть конвертировать в простые типы, такие как числа и/или строки