2011-10-02 33 views
0

我有以下的JSON字符串,通過AJAX到達服務器:json_decode不解釋陣列

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

正如你看到的,名稱和值的目的是要保持一個數組。問題是,當我撥打 $data = json_decode(stripslashes($_POST['data']), true); $data['Names'][0]我沒有得到'asdasd',因爲我想要的,但"["符號。問題出在哪裏?

P.S. JS代碼,發送JSON字符串:

  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); 
      } 
     }); 

名稱和值是一串文本字段,由類中選擇的。 噸發送變量,是完全無關的情況下:)

+1

JSON並不是真的正確。數組可能不應該被編碼爲這樣的字符串,因爲它會迫使你必須進行多次解碼。 – Pointy

+0

您能否給出一些最佳做法指南的鏈接? – Arnthor

+0

最佳實踐:1.編寫JSON,而不是JavaScript。 2.使用JSON對數據進行編碼。不要將JSON首先構建到字符串中的東西序列化。 – Quentin

回答

2

該字符串被不正確地編碼。 $ data ['Names']是一個字符串,所以通過訪問[0]你會得到第一個字符。

如果你還json_decode $ data ['Names']再次你應該得到的東西工作,雖然也實際上不正確ecoded(作爲一個對象與數字索引,而不是一個數組)。我非常確定嚴格的json解析器將在內部字符串上失敗。

我會建議修復它產生的任何東西,而不是解碼端。