2013-02-14 3 views
-1

내 웹 사이트에 json을 삽입하는 데 문제가 있습니다.Javascript/jQuery로 JSON 구문 분석

입니다 HTML과 자바 스크립트 : 콘솔에서

<!doctype html> 
<html lang="us"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery UI Example Page</title> 
    <link href="css/custom-theme/jquery-ui-1.10.0.custom.css" rel="stylesheet"> 
    <script src="js/jquery-1.9.0.js"></script> 
    <script src="js/jquery-ui-1.10.0.custom.js"></script> 
    <script> 

    function isJSON(str) { 
     try { 
      JSON.parse(str) 
     } catch (e) { 
      return false 
     } 
     return true 
    } 

    jQuery(function(){ 

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

     data = <?= json_encode($arr) ?> 

     if (isJSON(data)) { 
      json = jQuery.parseJSON(data) 
      console.log(json) 
     } else { 
      console.log("Not a json.") 
      console.log(data) 
      console.log(jQuery.parseJSON(data)) 
     } 

    }) 


    </script> 

<body> 


</body> 
</html> 

이 출력 다음

Not a json. filename.php:29 
Object {a: 1, b: 2, c: 3, d: 4, e: 5} filename.php:30 
Uncaught SyntaxError: Unexpected token o 

긴 하루를 이미 왔으며 대부분의 아마 (희망) 내가 뭔가를 분명 누락. 나는 생성 된 json의 유효성을 확인하려고 시도했다 : http://jsonlint.com/ 그리고 그들의 사이트에 따르면 그것은 유효했다.

미리 감사드립니다.

+1

피 볼 수 있습니다. – BenM

+0

@ BenM 왜? - 나는 그 (것)들에 결코 문제가 없었다. – Krabats

+0

@krabats : 모든 서버에서 기본적으로 사용하도록 설정되어 있지 않습니다. – cdmckay

답변

2

JSON은 다소 자바 스크립트 리터럴입니다.

스크립트에 덤프하면 전혀 구문 분석 할 필요가 없습니다.

var data = <?php echo json_encode($arr); ?>; 
console.log(data); 

당신이 뭔가 jQuery.parseJSON에 전달하려는 경우

는 당신은 JSON이 아닌 일반 JSON을 포함하는 자바 스크립트 문자열을 생성해야합니다.

+0

명확하지 않은 경우 PHP 실행 후 첫 번째 줄은 'var data = { "a": 1, "b": 2, "c": 3, "d": 4, "e": 5 }'. 소스를 보게되면 지금보아야합니다. – cdmckay

+0

문제는 다른 코드에서 발생했지만 게시물이 제게 올바른 방향으로 밀었습니다. 감사! – Krabats

1

여기에는 PHP 단축 태그 사용 외에도 두 가지 문제점이 있습니다. 첫째, 모든 행의 끝에 세미콜론이 누락되었습니다.

data = {"a": 1, "b": 2, ...}; 

이 이미 디코딩 된 객체입니다 그리고 두 번째는

data = <?= json_encode($arr) ?>; 

이 같은 뭔가를 생성합니다 라인

입니다. 그러면 다시 json_decode 수 없습니다. 그리고 그렇게 할 필요가 없습니다.

data = "{\"a\": 1, \"b\": 2, ...}"; 

이제 data 문자열, json_decode 될 수 있습니다 포함

data = "<?= str_replace("\"", "\\\"", json_encode($arr)) ?>"; 

이 이런 식으로 뭔가를 생성합니다 : 당신이 그것을 보내고 json_decode 주장하는 경우에, 당신은 그것을 문자열로 출력 필요 디.

+0

JSON 인코딩 객체는 객체 키 주위에 큰 따옴표를 사용합니다. – cdmckay

+0

@cdmckay 예, 당신 말이 맞아요, 나는 대답을 업데이트 할 것입니다. 그러나이 경우에는 아무런 차이가 없습니다. –

+0

JS의 세미콜론은 옵티 셔널입니다 – Krabats

0

어쩌면 당신은 PHP 짧은 태그를 사용하여이 예를

var object = {} 
object.text = "Hello World!" 

var json = JSON.stringify(object) 
alert(json) 

var object = JSON && JSON.parse(json) || $.parseJSON(json) 
alert(object.text) 

Jsfiddle link