PHP에서 JavaScript로 JSON을 반환 하시겠습니까?


135

jQuery AJAX를 통해 호출되는 PHP 스크립트가 있습니다. PHP 스크립트가 JSON 형식의 데이터를 자바 스크립트로 반환하기를 원합니다. PHP 스크립트의 유사 코드는 다음과 같습니다.

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

기본적으로 $ json에 두 개의 for 루프를 삽입해야합니다.

답변:


194

Php에는 JSON 직렬화 기능이 내장되어 있습니다.

json_encode

json_encode

Not Invented Here Here 증후군을 겪을 수 있거나 겪지 않는 경우 사용 하십시오 .


2
훌륭 해요, 고맙습니다. 나는 SO에 게시하기 전에 실제로 이것을 찾았지만 호스팅에서 사용할 수 있다고 생각하지 않았습니다.
AquinasTub 2016 년

이 '답변'은 완전하지 않고 오히려 유용하지 않습니다. 자세한 내용은 aesede의 답변을 참조하십시오.
Funk Doc

@ FunkDoc 문제의 OP는 유일한 선택이라는 가정하에 JSON을 직접 손으로 묶었습니다. 그것이 유일한 선택이 아님을 아는 것은 적합한 해결책이었습니다. 해당 JSON의 최종 결과가 HTTP 응답으로 생성 될 의무 는 없습니다 . 어떤 상황에서는 유용하지만 "헤더 추가"정보는 해당 JSON으로 수행하는 작업이 단순히 "웹 페이지로 그대로 반환"하는 것이 아니라면 도움이되지 않습니다. 이 질문은 유스 케이스에 설명을 추가하지 않았습니다.
Kent Fredric 2016 년

(또한 AJAX에는 헤더를 설정하는 것이 꼭 필요한 것은 아닙니다. 갑작스럽게 보일 경우 사과하지만 따옴표로 ''답장 '이라는 단어로 표시된 그늘은 실제로 저를 상처주었습니다. 10 년 전에 이미 죽었습니다. 나는 너무 오래 전에 PHP에서 나아 갔고, 이제 옮겨온 언어 멀어지고 있습니다.)
Kent Fredric

145

이전 답변에서 누락 된 몇 가지 사항은 다음과 같습니다.

  1. PHP에서 헤더를 설정하십시오.

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()자바 스크립트 반환 할 수 배열 대신 자바 스크립트 객체를 참조하십시오
    는 PHP 스크립트에서 JSON 반환
    이 것은 배열과 객체가 동일하지 않은 일부 경우 알고있는 것이 중요 할 수있다.


2
데이터가 반환되는 대신 에코 된다는 점에 유의해야합니다 ! 처음으로 개념을 배울 때 그것은 나를 위해 물었습니다. 일반적인 프로그래밍에서는 거의 모든 것이 "인쇄"되지 않은 채 반환됩니다.
Juha Untinen

@Juha, json_encode()(모든 기능과 마찬가지로) 항상 (을 포함하여 NULL) 무언가를 반환한다는 것을 명심하십시오 . 데이터를 인쇄하고 처리 한 다음 인쇄하여 나중에 사용할 수 있도록 변수에 저장하거나 파일에 저장하는 등의 작업을 수행 할 수 있습니다 . PHP : Returning valuesreturn 에서 더 많은 내용 을 읽을 수 있습니다 . 또한 당신은 (그리고해야!) 각 기능을 사용하면 수익을 모르는 무엇을위한 검사는, 우리의 예를 볼 수있다 ()로 json_encode를 이 상태 JSON 실패에 성공 FALSE에 문자열을 인코딩줍니다.
aesede

그때, 나는 return json_encode($jsonArray);나중에 그것을 알아 차릴 때까지 왜 작동하지 않는지 궁금 했습니다 (AngularJS http.get은 아무것도 얻지 못했습니다).
Juha Untinen

83

PHP 문서 에는 JSON 섹션 이 있습니다. 그래도 PHP 5.2.0이 필요합니다.

PHP 5.2.0부터 JSON 확장은 기본적으로 번들로 제공되고 PHP로 컴파일됩니다.

그렇지 않은 경우 설치할 수 있는 PECL 라이브러리는 다음 과 같습니다 .

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

13

일반적으로 수신 측의 데이터 구조에 관심이 있습니다.

json_encode($result)

이렇게하면 배열 키도 유지됩니다.

json_encode는 utf8 인코딩 데이터에서만 작동합니다.


4

PHP 용 Simple JSON을 사용할 수 있습니다 . JSON을 위조하는 데 도움이되는 헤더를 보냅니다.

그것은 다음과 같습니다

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>

경고 : PHP 용 단순 JSON은 GPLv2 라이센스가 있으므로 사용하려면 자신의 코드가 오픈 소스 여야합니다.
Jamie Birch

1
MIT 라이센스 :)
Alexis Paques

1
@JamieBirch 실제로 저는 당신이 GPL이 어떻게 작동하는지 오해하고 있다고 생각합니다. AGPL에 대해 이야기하고 있다면 무언가에있을 것입니다. 그러나 인터넷의 방대한 범위는 GPL 소프트웨어를 기반으로하며 코드를 오픈 소스로 제공 할 의무가 없습니다. 사용자가 제어 할 수있는 실행 파일을 제공하지 않고 인터페이스 만 제공하기 때문입니다. 그들이 가지고있는 유일한 의무는 프로젝트의 디지털 사본을 제공하는 사람에게도 소스를 제공해야한다는 것입니다.
Kent Fredric 2016 년

1

$ msg = "잘못된 사용자 이름 또는 비밀번호를 입력했습니다"; $ responso = json_encode ($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.