让我们考虑如下tcl数据:
set arr {a {{c 1} {d {2 2 2} e 3}} b {{f 4 g 5}}}
使用huddle模块转换为Json格式:
set json_arr [huddle jsondump [huddle compile {dict * {list {dict d list}}} $arr] {} {}]
puts $json_arr
{"a":[{"c":1},{"d":[2,2,2],"e":3}],"b":[{"f":4,"g":5}]}
这里我已经将tcl数组的结构指定为{dict * {list {dict d list}}}
。但是,我想自动化这部分(不想手动查找结构)。
我能够确定字符串,列表和字典的类型,但无法找到此类变量的类型或更复杂。
请以相同的方式发布任何建议或其他方式。
答案 0 :(得分:2)
如果你愿意的话,Tcl是无类型的,或者是“免费的”。这是它的优势之一,但它也意味着在将Tcl与JSON等类型格式连接时,您将不得不做一些工作。
您无法自动创建任意Tcl数据的完整且可靠的泛型类型描述。
蜷缩的目的是协助向Tcl数据添加类型信息,同时保留其“可用性”,但仍需要您对数据模型的理解,并且必须手动表示为代码。
当然可以自动创建特定于域的Tcl数据的特定类型描述。您的示例中的数据似乎难以理解,但如果存在始终保持的规则(整数字符串总是整数标量或整数数组等),则这些规则可用于驱动杂乱的格式生成器。