我对tcl很新。在我的实现中,我的输入是一个嵌套的json文件。我需要将值与键一起存储在txt文件中。 我将json文件转换为dict,然后使用http://wiki.tcl.tk/13419中的 jsonget ,我可以提供密钥并且非常容易地迭代地找到每个密钥的值。 现在,我的问题是,我的json文件可能会在以后更新。因此,我不知道json中添加了哪个键,因此我也无法获得这些值。 我的代码必须是通用的,并且必须适用于所有这些动态json文件,它必须能够提供所有这些键及其值。
例如
{"test":[{"a":1,"b":2}]} }
result:
a 1
b 2
{"test":[{"a":1,"b":2,"c":3}]}
result:
a 1
b 2
c 3
{"test":[{"a":1,"b":2,"c":[{"d":4,"e":5}]]}
result:
a 1
b 2
c d 4
e 5
所有这些,无需更改代码。有没有办法做到这一点?
答案 0 :(得分:1)
您的示例和您的措辞(“要求”)都不是特别有用。我只能对您的意图进行二次猜测:您是否想知道如何编写一段Tcl,以一般(常规)方式重复处理JSON文档的选定内容,而不知道其结构或实际文字内容(例如,关键标签)?
...这有帮助吗?
proc foo {json} {
foreach k [dict keys [lindex [dict get $json test] 0]] {
puts "$k => [jsonget $json test 0 $k]"
}
}
foo [json::json2dict { {"test":[{"a":1,"b":2}]} }];
foo [json::json2dict { {"test":[{"a":1,"b":2,"c":3}]} }];
foo [json::json2dict { {"test":[{"a":1 }]}}];
它并没有给格伦指出的东西增加太多。
...改进你的例子,措辞。