[php] PHP 스크립트에서 JSON 반환

PHP 스크립트에서 JSON을 반환하고 싶습니다.

결과 만 반향합니까? Content-Type헤더 를 설정해야 합니까?



답변

일반적으로 없으면 괜찮지 만 Content-Type 헤더를 설정할 수 있고 설정해야합니다.

<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);

특정 프레임 워크를 사용하지 않는 경우 일반적으로 일부 요청 매개 변수가 출력 동작을 수정하도록 허용합니다. 일반적으로 빠른 문제 해결을 위해 헤더를 보내지 않거나 데이터 페이로드를 print_r로 눈에 띄게하는 것이 유용 할 수 있습니다 (대부분의 경우 필요하지는 않습니다).


답변

JSON을 반환하는 훌륭하고 명확한 PHP 코드는 다음과 같습니다.

$option = $_GET['option'];

if ( $option == 1 ) {
    $data = [ 'a', 'b', 'c' ];
    // will encode to JSON array: ["a","b","c"]
    // accessed as example in JavaScript like: result[1] (returns "b")
} else {
    $data = [ 'name' => 'God', 'age' => -1 ];
    // will encode to JSON object: {"name":"God","age":-1}  
    // accessed as example in JavaScript like: result.name or result['name'] (returns "God")
}

header('Content-type: application/json');
echo json_encode( $data );


답변

메소드 의 매뉴얼에json_encode 따르면 문자열이 아닌 값을 반환 할 수 있습니다 ( false ).

성공 또는 FALSE실패시 JSON 인코딩 문자열을 반환합니다 .

이 경우 echo json_encode($data)빈 문자열이 출력되며 이는 유효하지 않은 JSON 입니다.

json_encode예를 들어 false인수에 UTF-8이 아닌 문자열이 포함되어 있으면 실패 (및 반환 )됩니다.

이 오류 조건은 다음과 같이 PHP에서 캡처해야합니다.

<?php
header("Content-Type: application/json");

// Collect what you need in the $data variable.

$json = json_encode($data);
if ($json === false) {
    // Avoid echo of empty string (which is invalid JSON), and
    // JSONify the error message instead:
    $json = json_encode(["jsonError" => json_last_error_msg()]);
    if ($json === false) {
        // This should not happen, but we go all the way now:
        $json = '{"jsonError":"unknown"}';
    }
    // Set HTTP response status code to: 500 - Internal Server Error
    http_response_code(500);
}
echo $json;
?>

그런 다음 수신 측은 jsonError 속성 이 존재한다는 것은 오류 조건을 나타내며 그에 따라 처리해야한다는 것을 알아야합니다.

프로덕션 모드에서는 일반적인 오류 상태 만 클라이언트에 보내고 나중에 조사 할 수 있도록보다 구체적인 오류 메시지를 기록하는 것이 좋습니다.

PHP 문서 에서 JSON 오류 처리에 대해 자세히 알아보십시오 .


답변

시도 로 json_encode를 데이터를 인코딩와 콘텐츠 형식을 설정합니다 header('Content-type: application/json');.


답변

컨텐츠 유형을 설정 한 header('Content-type: application/json');다음 데이터를 에코하십시오.


답변

또한 액세스 보안을 설정하는 것이 좋습니다. 도달하려는 도메인으로 *를 바꾸십시오.

<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
    $response = array();
    $response[0] = array(
        'id' => '1',
        'value1'=> 'value1',
        'value2'=> 'value2'
    );

echo json_encode($response);
?>

: 여기에 더 많은 샘플입니다 방법 우회 액세스 제어 – 허용 – 원점?


답변

<?php
$data = /** whatever you're serializing **/;
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
?>