如何动态创建JSON对象


How can I create a JSON object dynamically?

我想动态创建一个JSON对象。JSON对象必须如下所示:

{ 
                $capa:[$fila['test_name'],...etc],
                .
                .
                .etc    
};

密钥和值将通过MySQL查询进行检索
这就是我正在做的:

$array_container= array();
while($fila=mysqli_fetch_assoc($sql)){

                    $format_org=str_replace(" ","_",$fila["organization"]);
                    $format_eval=str_replace(" ","_",$fila["EvaluationType"]);
                    $format_test=str_replace(" ","_",$fila["test_name"]);
                                        $CapaEnviar=$format_org.$format_eval;
                              $array_container[] = array($CapaEnviar => $fila['test_name']);
}
echo json_encode($array_container,true);

使用前面的代码,我可以检索具有重复键的JSON对象。

这段代码是AJAX请求的答案,所以一旦JSON对象被正确创建,我就会发回这个JSON对象,以便检索关键字和值,所以我必须分别检索关键字和数值。

根据您的评论,

这个数组的结果如下:[{"TEST1":"valueT1"},{"TEST1":"otherValue"}],我想要的是有一个像这样的json:[{"TEST1":['valueT1','otherValue']}],正如你所看到的,我想避免重复的键。

解决方案:

在您的while循环中,更改此行

$array_container[] = array($CapaEnviar => $fila['test_name']);

$array_container[$CapaEnviar][] = $fila['test_name'];

更新:

如何通过ajax检索这个密钥及其值?

由于您希望从服务器获得json对象,请将此设置dataType:'json'添加到AJAX请求中。dataType是您期望从服务器返回的数据类型。在success()回调函数中,循环json结果以获得(key,value)对

以下是参考资料:

  • jQuery.ajax()

所以你的AJAX框架代码应该是这样的:

$.ajax({
    type: 'POST',
    url: 'yourpage.php',
    dataType: 'json',
    cache: 'false',
    beforeSend: function(){
    },
    success: function(data){
        $.each(data, function(key, value) {
            alert("Key:" + key + ", value: " + value);
        });
    },
    error: function(){
        // error
    }
});