Как кодировать простой текстовый ответ в 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));

Ссылка http://php.net/manual/en/function.json-encode.php

Этот метод работает для 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 += "\"}";

}

Другие вопросы по тегам