Как кодировать простой текстовый ответ в JSON и получать конкретные данные с помощью PHP CURL
Я получаю ответ API в текстовом формате. Поэтому при работе с данными ответа мне нужно закодировать ответ в формате JSON. Тогда я могу легко получить данные о желании и использовать их.
Запросить код (образец)::
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.arshohag.me/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "login=testapp&key=152456&md5=chasdg4as432&action=test",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/x-www-form-urlencoded",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Код ответа (образец)::
id=2566546
authentication_key=74448975
error_code=0
error_txt=Test Ok
Я хочу закодировать Ответ в формате JSON, как это -
{
"id" : "2566546",
"authentication_key" : "74448975",
"error_code" : "0",
"error_txt" : "Test Ok"
}
а также захватить данные, как это -
$id=array["id"];
echo $id;
3 ответа
Решение
$rawText = "
id=2566546
authentication_key=74448975
error_code=0
error_txt=Test Ok
";
// Split by new line
// array_filter to skip empty values
$linesArray = array_filter(preg_split('/\R/', $rawText));
$craftedArray = array();
foreach($linesArray as $line) {
$tempArray = explode("=", $line);
$craftedArray[$tempArray[0]] = $tempArray[1];
}
// Encode to JSON Object
echo json_encode($craftedArray);
Выход:
{
id: "2566546",
authentication_key: "74448975",
error_code: "0",
error_txt: "Test Ok"
}
Чтобы получить данные обратно из JSON:
// Decode JSON. Assume JSON object is stored in $jsonData
$decodedData = json_decode($jsonData);
var_dump($decodedData);
// Access like below
$id = $decodedData->id;
echo "\nID is: ".$id;
Выход:
object(stdClass)#1 (4) {
["id"]=>
string(7) "2566546"
["authentication_key"]=>
string(8) "74448975"
["error_code"]=>
string(1) "0"
["error_txt"]=>
string(7) "Test Ok"
}
ID is: 2566546
Сделайте это с помощью json_encode. Используйте это так
var_dump(json_decode($response, true));
Этот метод работает для Java, вы можете преобразовать его на свой язык, если каждая строка заканчивается \ r \ n
String jsonStringConverter(String stringResponse) {
String[] parts = stringResponse.split("\\r\\n");
String jsonString = "{\"";
for (int i = 0; i < parts.length; i++) {
jsonString += parts[i].replace("=", "\":\"");
jsonString += (i < parts.length - 1) ? "\", \"" : "";
}
return jsonString += "\"}";
}