Javascript json字符串化和json解码问题

Javascript json字符串化和json解码问题,javascript,php,json,Javascript,Php,Json,html <input type="hidden" name="test[]" id="test" value= "" /> php $json = $_POST['test']; var_dump($json); //array(1) { [0]=> string(43) "[\"val1\",\"val2\",\"val3\"]" } var_dump($json[0]); //string(43) "[\"val1\",\"val2\",\"val3\"]" var

html

<input type="hidden" name="test[]" id="test" value= "" />
php

$json = $_POST['test'];
var_dump($json); 
//array(1) { [0]=> string(43) "[\"val1\",\"val2\",\"val3\"]" } 
var_dump($json[0]);
//string(43) "[\"val1\",\"val2\",\"val3\"]"
var_dump(json_decode($json[0]));
//return NULL

我的json字符串是一种有效的json格式,所以我不知道为什么它不起作用。有什么想法吗

您试图在数组上使用stringify。你不能

它是用来做物体的。因此,您应该这样做:

jQuery(document).on('click', '#target', function () {
    var jsObj = {
        val1: "val1", 
        val2: "val2", 
        val3: "val3"
    };

    jQuery('input[name^="test[]"]').val(JSON.stringify(jsObj));

});

echo json\u last\u error\u msg()
让我们看看PHP不喜欢什么。var_dump(json_decode($json[0],true));或者试试:$json[0]=str_replace(“\”、““”、$json[0]);也许是因为逃避这种情况如果关键是向PHP发送一个数组,那么以这种方式使用JSON就没有意义了。使用对象的要点是具有与名称相关的属性,而数组在JS中是匿名的。数组无需任何形式的编码即可发送到PHP。它只是按原样工作。您可以在数组上使用
JSON.stringify
。数组可以是对象数组。@SteveChamaillard,如果我只使用:jQuery('input[name^=“test[]”).val(jsArr);var_转储给我:数组(1){[0]=>string(14)“val1,val2,val3”}。我不能使用val1、val2、val3,因为它是一个字符串。如果这是一个简单的AJAX POST请求,您试图将数组发送到PHP,那么您应该只使用AJAX代码,而不需要任何隐藏的输入。如果您确实需要隐藏的输入,它不应该由JS填充,而是由客户端填充。使用'name=“test[]”的唯一一点是当您有多个'name=“test[]”时。然后它们将填充一个数组,并作为数组发送到PHP。如果你两种方法都做不到,仍然需要用你以前的方法,你可以简单地使用我需要隐藏的输入。我有多个测试[]的值。我将此代码用于wordpress插件,隐藏的输入位于元数据库中。js更改隐藏输入的值,在我获取该值并将其与帖子一起保存之后。我以前使用过explode,但我发现使用数组更干净。我认为你可以严格地定义一个数组…看看公认的解决方案
jQuery(document).on('click', '#target', function () {
    var jsObj = {
        val1: "val1", 
        val2: "val2", 
        val3: "val3"
    };

    jQuery('input[name^="test[]"]').val(JSON.stringify(jsObj));

});