如何从TCL输出JSON

如何从TCL输出JSON,tcl,Tcl,生成JSON输出(例如来自TCL的输出)的最佳方法是什么?您建议在中创建TCL数据时使用什么数据结构,以及您会使用什么JSON库(请尽可能使其保持标准) Tcl的“标准库”称为tcllib(这是一套外部软件包,但可用于任何明智的操作系统)json和json::write软件包。Tcl的“标准库”称为tcllib(这是一套外部软件包,但可用于任何明智的操作系统)json和json::write软件包。目前最推荐的Tcl json库是,它有很好的文档记录,速度快,功能强大。它被设计成能够扩展到非常大

生成
JSON
输出(例如来自
TCL
的输出)的最佳方法是什么?您建议在中创建
TCL
数据时使用什么数据结构,以及您会使用什么
JSON
库(请尽可能使其保持标准)


Tcl的“标准库”称为
tcllib
(这是一套外部软件包,但可用于任何明智的操作系统)json和
json::write
软件包。

Tcl的“标准库”称为
tcllib
(这是一套外部软件包,但可用于任何明智的操作系统)
json
json::write
软件包。

目前最推荐的Tcl json库是,它有很好的文档记录,速度快,功能强大。它被设计成能够扩展到非常大的文档

package require rl_json

# Simple write the value into a Tcl variable
set errTxt "0"

# Build a composite JSON value; perfect for iteration out of a DB…
set parties {}
json set parties "party_561" "num" 228
json set parties "party_5037" "num" 98

# Another example, this time with actual iteration…
set apps {}
foreach {id num} {app_8141 228 app_9009 98} {
    json set apps $id "num" $num
}

# Build the overall doc and print it; note the interpolations of strings and JSON sub-documents
puts [json template {
    {"return_block": {
        "error_text": "~S:errTxt",
        "party_response_list": "~J:parties",
        "app_response_list": "~J:apps"
    }}
}]

请注意,您需要明确说明您在关键位置所做的事情;图书馆不会试图猜测事物的类型。(另外,您可以只使用大量的
json集调用,但这太麻烦了。)

目前最推荐的Tcl json库是,它有很好的文档记录,速度快,功能强大。它被设计成能够扩展到非常大的文档

package require rl_json

# Simple write the value into a Tcl variable
set errTxt "0"

# Build a composite JSON value; perfect for iteration out of a DB…
set parties {}
json set parties "party_561" "num" 228
json set parties "party_5037" "num" 98

# Another example, this time with actual iteration…
set apps {}
foreach {id num} {app_8141 228 app_9009 98} {
    json set apps $id "num" $num
}

# Build the overall doc and print it; note the interpolations of strings and JSON sub-documents
puts [json template {
    {"return_block": {
        "error_text": "~S:errTxt",
        "party_response_list": "~J:parties",
        "app_response_list": "~J:apps"
    }}
}]

请注意,您需要明确说明您在关键位置所做的事情;图书馆不会试图猜测事物的类型。(另外,您可以使用大量的
json集
调用,但这太麻烦了。)

谢谢。对于我的JSON示例,您将使用什么数据结构来生成我的JSON输出?@JDor,使用
JSON::write
,这其实并不重要,因为软件包假设您自己遍历数据结构,并以您认为适合的方式序列化必要的(键和)值。是的,我对此有些费劲。我现在有数组中的数据,例如party_id(561)是228等等。也许我需要问一个新问题如何使用json::write包。
json::write object{*}[array get party_id]
是您应该需要的近似值谢谢。对于我的JSON示例,您将使用什么数据结构来生成我的JSON输出?@JDor,使用
JSON::write
,这其实并不重要,因为软件包假设您自己遍历数据结构,并以您认为适合的方式序列化必要的(键和)值。是的,我对此有些费劲。我现在有数组中的数据,例如party_id(561)是228等等。也许我需要问一个新问题如何使用json::write包。
json::write object{*}[array get party_id]
是你应该需要的近似值。谢谢Donal,非常有用。。。我在执行上述代码时遇到了一个异常:
在执行“JSON set parties”party_561“num”228“
之前,我一直在使用
JSON template
创建一个JSON对象,但我尝试使用
JSON set
,但没有获得多少成功,因此,我尝试了上面的例子。我看了一下测试套件,然后再仔细研究了一下,如果
parties
是一个表示空对象文本的字符串,它就可以工作了;i、 e:
set parties{}
set parties{{{}
谢谢多纳尔,非常有用。。。我在执行上述代码时遇到了一个异常:
在执行“JSON set parties”party_561“num”228“
之前,我一直在使用
JSON template
创建一个JSON对象,但我尝试使用
JSON set
,但没有获得多少成功,因此,我尝试了上面的例子。我看了一下测试套件,然后再仔细研究了一下,如果
parties
是一个表示空对象文本的字符串,它就可以工作了;i、 e:
set parties{}
set parties{{}