TCL到JSON:使用huddle在单行中编写JSON输出

时间:2017-11-03 07:08:39

标签: json tcl

让我们考虑如下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

Json冷冻阵列:

{
  "a": [
    {"c": 1},
    {
      "d": [
        2,
        2,
        2
      ],
      "e": 3
    }
  ],
  "b": [{
      "f": 4,
      "g": 5
    }]
}

写一行:

set json_arr [huddle jsondump [huddle compile {dict * {list {dict d list}}} $arr] {} {}]
puts $json_arr

更新了Json格式的数组:

{"a":[{"c":1},{"d":[2,2,2],"e":3}],"b":[{"f":4,"g":5}]}

这里{} {}的含义是什么?

在json和json :: write module输出的情况下,我可以将它用于单行吗?

1 个答案:

答案 0 :(得分:1)

jsondump的最后三个可选参数是offsetnewlinebegin_offset。您可以使用它们来指定用于格式化输出字符串的字符串。如果您不指定它们,将使用默认字符串。

如果确实指定了它们,则需要遵循可选参数的协议,即如果要指定begin_offset,则还需要指定offsetnewline等。在这种情况下,offsetnewline被指定为空字符串,begin_offset使用其默认值。

尝试使用虚拟值调用jsondump以了解它们的使用方式:

% huddle jsondump [huddle compile {dict * {list {dict d list}}} $arr] <A> <B> <C>
{<B><C><A>"a": [<B><C><A><A>{"c": 1},<B><C><A><A>{<B><C><A><A><A>"d": [<B><C><A><A><A><A>2,<B><C><A><A><A><A>2,<B><C><A><A><A><A>2<B><C><A><A><A>],<B><C><A><A><A>"e": 3<B><C><A><A>}<B><C><A>],<B><C><A>"b": [{<B><C><A><A><A>"f": 4,<B><C><A><A><A>"g": 5<B><C><A><A>}]<B><C>}

在每个组件周围插入newlinebegin_offset字符串,并在组件之前插入一个或多个offset字符串以反映缩进级别。

json::write使用indentedaligned子命令来自定义格式。