2010-04-28 1 views
40

서버의 Ajax 요청에서 JSON 응답을 수신합니다. 이 방법은 작동 :php에서 아약스 JSON 응답 내의 문자열에 큰 따옴표를 넣을 수 있습니까?

{ "A": "1", "B": "안녕하세요 '키티'"}

하지만 키티 큰 따옴표 퍼팅에 성공하지 못했습니다.

"Ajax 응답에서"\ x22로 변환하면 JavaScript로 여전히 해석되며 "JSON을 구문 분석 할 수 없습니다.

나중에 \ 이스케이프해야하고 나중에 이스케이프 처리해야하나요?

어떻게 하시겠습니까?

편집 : 나는 내가 잘 표현 확실하지 :

안녕하세요 "키티"

나는 또한 수 필요한 경우 : 내가 안으로 "B" 구문 분석 후 의이 문자열을 원하는 "b"를 변환하는 구문 분석 후에 추가 단계를 추가하십시오. 그러나 이것이 필요하지 않다고 추측합니다. 더 우아한 방법이있어서 자동으로 발생합니까?

편집 2 : ajax 페이지는 php에 의해 생성됩니다.

$b = 'hello "kitty"';  

    // no 1: 
    //$b = str_replace('"',"\x22",$b); 

    // or no 2: 
    // $b = addslashes($b); 

    // or no 3: 
    $b = str_replace('"','\"',$b); 

    echo '{ "a" : "1", "b" : "' . $b . '"}'; 

EDIT3 :이 솔루션은 마지막으로 작동합니다

$b = 'hello "kitty"';  
$b = str_replace('"','\\"',$b); 
echo '{ "a" : "1", "b" : "' . $b . '"}'; 
+3

'\ "OK이고'\ u0022'는 괜찮지 만'\ x22'는 자바 스크립트 문자열 리터럴에서 유효하지만 JSON에서는 사용할 수 없습니다. – bobince

답변

56

는 그냥 그것을 탈출 나는 B의 값 페이지에 JSON 구문 분석 오류의 모든 결과를 만들기 위해 지금 몇 가지 시도 백 슬래시 :

> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'}) 
{"a":5,"b":"a \"kitty\" mighty odd"} 
> JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}') 
Object 
    a: 5 
    b: a "kitty" mighty odd 
    __proto__: Object 

JSON 파서는 큰 따옴표로 큰 따옴표 문자열 안에 \"을 인식하고 있습니다. 두 번째 예제에서 Javascript 파서 패스가 있고 다른 JSON 파서 패스가 있기 때문에 이중 백 슬래시가 필요합니다.

+0

덕분에 많은 시간을 할애 할 수 있습니다. karlthorwald - aka – user89021

+0

@ user89021 : 백 슬래시도 벗어나는 것에 관한 내용도 읽으십시오. – bobince

+0

내 주를 저장 했으므로. 여러 개의 파서가 나오면 세 개의 슬래시를 추가해야만합니다. 결국 작동합니다! –

2

은 json_encode (모든 PHP 요소) 만 사용하면 자동으로 구문 분석됩니다.

+0

그래,하지만 내 PHP 버전은 오래된 것입니다, 우분투 하디는 아직 PHP 5.2.4-2ubuntu5.10 만 있습니다. karthorwald - ak – user89021

+0

5.2가 있어야하기 때문에 다시 확인하겠습니다. 지난 번에는 거기에 없었습니다. – user89021

0

약간의 오프 주제, 당신은 당신의 서버에 자바 스크립트/NodeJS를 사용하고 ES6 템플릿 리터럴 ("기독교"주위에 사용되는 역 따옴표를``)를 사용하지만 칠년 후에 당신은 아마 이미 NodeJS :

를 사용할 수 있습니다
var myJSON = { 
    "name": { 
     "first": `"Christian"`, 
     "last": "Broberg" 
    }, 
    "age": 49, 
    "skills": [ "JavaScript", "React", "NodeJS" ], 
    "married": false, 
    "superpowers": null 
} 
관련 문제