#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 не заботится о сложных типах, таких как географические точки и т. Д. Поэтому вы всегда можете захотеть конвертировать в простые типы, такие как числа и/или строки