TCL Dict到JSON

TCL Dict到JSON,json,dictionary,tcl,Json,Dictionary,Tcl,我试图将dict转换为JSON格式,但没有看到任何使用TclLib JSON包的简单方法。比如说,我对dict的定义如下: set countryDict [dict create USA {population 300 capital DC} Canada {population 30 capital Ottawa}] 我想将其转换为json格式,如下所示: { "USA": { "population": 300, "c

我试图将dict转换为JSON格式,但没有看到任何使用TclLib JSON包的简单方法。比如说,我对dict的定义如下:

set countryDict [dict create USA {population 300 capital DC} Canada {population 30 capital Ottawa}]
我想将其转换为json格式,如下所示:

{
  "USA": {
    "population": 300,
    "captial": "DC"
  },
  "Canada": {
    "population": 30,
    "captial": "Ottawa"
  }
}

(“人口”是数字,大写是字符串)。我正在使用TclLib json包()。任何帮助都将不胜感激。

您似乎希望“直接去那里”的方法有两个问题:

  • Tcl的类型系统与JSON的类型系统截然不同;在Tcl中,每个值都是一个(子类型)字符串,但JSON期望对象、数组、数字和字符串是完全不同的
  • 资本
    变为
    资本
    。为了额外的乐趣。(希望这只是你的打字错误,但我们会处理的。)
  • 我建议用这个;它是一个功能更强的包,将JSON作为基本类型。(在查询JSON结构时,它甚至做得更好。)

    除了不同的缩进,它几乎完全生成您要求的输出
    $result
    是输出的“生产”版本,您可以使用它进行进一步处理,但它没有多余的空格(当您处理超过100MB的文档时,这是一个很好的选择)


    注:

    • 初始JSON对象可以这样做:

      set result "{}"
      
      这也同样有效(并且是相同的Tcl字节码)

    • json集
      将项目放入对象或数组;这正是我们在这里想要的(在
      dict中,
      检查输入数据)

    • json模板
      使用可选字典将模板中的替换名称映射到值;这非常适合您的用例。否则,我们就必须用数据{}进行dict,将字典的内容映射到变量中,而当输入数据没有严格控制时,这就不够完美了

    • json模板
      的模板参数的内容本身就是json。叶字符串值中的
      ~N:
      前缀表示“将其替换为替换名为…”的数字,
      ~S:
      表示“将其替换为替换名为…”的字符串。还有其他的


    正如您可能知道的,我对Tcllib json代码没有太高的评价。RLU json更新更好。感谢您确认TclLib json包不是那么容易使用!rl_json包是否与标准Tcllib库一起分发?如果它不包含在标准库中,那么将此包包含在自定义应用程序中有多容易?我知道有些软件包可以直接下载/包含,但其他一些软件包需要经过构建过程,这可能会很痛苦,尤其是如果您经常这样做的话。我还需要研究这个包的许可条款。他非常宽容。但它确实需要构建:它是一个简单的
    配置——使用tcl=/directory/containing/tclclconfig.sh/
    +make。该许可证看起来像是tcl许可证(包括奇怪的美国政府条款,该条款用这么多的话说得这么少),许可人的名字被归档并替换。
    set result "{}"