我有一个以下的JSON字符串,通过AJAX到达服务器:
{"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);
}
});
名称和值是由类选择的一组文本字段。 发送 m 和 t 变量与案例完全无关:)
答案 0 :(得分:2)
字符串编码错误。 $ data ['Names']是一个字符串,所以通过访问[0]你将获得第一个字符。
如果你再次json_decode $ data ['Names']你应该得到一些工作,虽然实际上也是错误的ecoded(作为一个带有数字索引而不是数组的对象。)我很确定严格的json解析器会在那个内部字符串上失败。
我建议修复任何产生它的东西,而不是在解码方面。