2011-10-02 1 views
0

을 해석하지 : 보시다시피, 이름 및 값이 배열을 유지하도록했다json_decode는 서버에 AJAX를 통해 도착, 나는 다음과 같은 JSON 문자열을 배열

{"Names":"[{0:'asdasd'}]","Values":"[{0:'ad'}]"} 

. 문제는 전화 할 때 $data = json_decode(stripslashes($_POST['data']), true); $data['Names'][0] 내가 원하는대로 'asdasd'를 얻지 못하지만, "[" 기호입니다. 문제가있는 곳은 어디입니까?

P. JSON 문자열을 전송 JS 코드 :

  var arr_names = "["; 
     names.each(function(i){ 
      arr_names += "{" + i + ":'" + $(this).val() + "'}"; 
      if (i < names.length-1) arr_names += ","; 
     }); 
     arr_names += "]"; 

     var arr_val = "["; 
     values.each(function(i){ 
      arr_val += "{" + i + ":'" + $(this).val() + "'}"; 
      if (i < values.length-1) arr_val += ","; 
     }); 
     arr_val += "]"; 

     var el = { "Names" : arr_names, "Values" : arr_val }; 
     el = encodeURIComponent(JSON.stringify(el)); 

     $.ajax({ 
      type:"POST", 
      dataType:"html", 
      data:"m=1&t="+type+"&data="+el, 
      url:plugin_path+"option-proc.php", 
      success: function(rsp){ 
       $("#result").html(rsp); 
      } 
     }); 

이름과 값은 클래스가 선택한 텍스트 필드의 무리입니다. m 및 t는 변수 보내지는 경우와 완전히 무관 :)

+1

JSON이 실제로 올바르지 않습니다. 배열은 여러 개의 디코드 패스를 수행해야하므로 강제로 문자열처럼 인코딩되지 않아야합니다. – Pointy

+0

모범 사례 가이드 링크를 제공해 주시겠습니까? – Arnthor

+0

모범 사례 : 1. JavaScript가 아닌 JSON을 작성하십시오. 2. JSON을 사용하여 데이터를 인코딩하십시오. JSON이 먼저 문자열에 내장 한 것들을 직렬화하지 마십시오. – Quentin

답변

2

문자열 잘못 인코딩된다. $ data [ 'Names']는 문자열이므로 [0]에 접근하면 첫 번째 문자를 얻을 수 있습니다.

또한 json_decode $ data [ 'Names']를 다시 사용하면 실제로는 (배열이 아닌 숫자 인덱스가있는 객체처럼) 실제로 잘못 인식 될 수 있습니다. 엄격한 json 파서 그 안쪽 문자열에서 실패합니다.

디코딩 쪽이 아니라 생성하는 부분을 고치는 것이 좋습니다.

관련 문제