如何从tcl数组创建javascript数组

时间:2013-06-25 09:55:22

标签: tcl adp

请帮助我,,,

我有一个名为all_tags的tcl数组,但问题是我需要将它转换为我的页面中的javascript数组,但是当涉及到javascript时我很弱。

如果以下是正确的,请告诉我,如果没有,那么正确的方法是什么?

<script>
var mytags = new Array();
<% 
foreach tag $all_tags {
     ns_puts [subst {
         mytags.push('$tag');
         }]
}
%>
</script>

之后是否可以在tcl proc中使用我的javascript数组?

1 个答案:

答案 0 :(得分:2)

要将Tcl中的数据转换为JSON,您需要来自Tcllib的json::write包。你可以像这样使用它从Tcl数组中创建一个JSON对象(类似的方法适用于Tcl字典):

package require json::write

set accumulate {}
foreach {key value} [array get yourArray] {
    lappend accumulate $key [json::write string $value]
}
set theJsonObject [json::write object {*}$accumulate]

将Tcl列表转换为JSON数组:

package require json::write
set accumulate {}
foreach item $yourList {
    lappend accumulate [json::write string $value]
}
set theJsonArray [json::write array {*}$accumulate]

请注意,在这两种情况下,我假设这些值都表示为JSON字符串。如果要嵌入的值是数字(或truefalse),则无需执行任何特殊操作;作为Tcl的值,它们可以像JSON文字一样正常工作。嵌入列表/数组/ dicts需要“{递归”使用json::write以及更多计划 - 它不是自动的,因为Tcl和JSON具有非常不同的类型概念。