tcl json 输出到通道和 map/loop 项?

tcl json output to channel and map/loop items?

我正在尝试从 websocket 获取输出到 eggdrop tcl 脚本。websocket 部分正在工作,我得到这样的输出:

{
    "action": "insert",
    "row": {
        "id": 7814727,
        "name": "Doom_Squad-Countdown_To_Doomsday_II-WEB-2016-ESG",
        "team": "ESG",
        "cat": "MP3",
        "genre": "",
        "url": "",
        "size": 0,
        "files": 0,
        "preAt": 1493884429,
        "nuke": null
    }
}

如何循环或映射项目?对我来说它看起来像 json 所以我尝试了以下操作: 这适用于同一站点的另一个输出,只有该输出包含 [ ]。

上面的输出没有,所以真的是json?

set asadict [::json::json2dict $body]

lmap item [dict get $asadict row] {
    dict filter $item key name team cat genre size files preAt nuke
}

foreach item [dict get $asadict row]  {
    dict with item {

       set humanReadableDate [clock format $preAt]

    putquick "PRIVMSG $chan :[=13=]3\[[=13=]37PRE[=13=]3\][=13=]3\[[=13=]33$cat[=13=]3\][=13=]3 $name [=13=]3\[[=13=]312PRETIME[=13=]3\][=13=]3 [=13=]2$humanReadableDate[=13=]2 \[PRE-INFO\] \[Group: $team\] \[Size: $size MB\] \[Files: $files\] \[Genre: $genre\] \[Nuked: $nuke\]"

    }
}

嗯,因为row只有一个元素,所以不需要循环:

set asadict [::json::json2dict $body]

set item [dict get $asadict row]
dict filter $item key name team cat genre size files preAt nuke

dict with item {
   set humanReadableDate [clock format $preAt]
   putquick "PRIVMSG $chan :[=10=]3\[[=10=]37PRE[=10=]3\][=10=]3\[[=10=]33$cat[=10=]3\][=10=]3 $name [=10=]3\[[=10=]312PRETIME[=10=]3\][=10=]3 [=10=]2$humanReadableDate[=10=]2 \[PRE-INFO\] \[Group: $team\] \[Size: $size MB\] \[Files: $files\] \[Genre: $genre\] \[Nuked: $nuke\]"
}

当您尝试对其进行循环时,您实际上是一次循环遍历键和值。