如何在st中解析来自stdin的无限json数组?

Tri*_*rch 2 json go jsonstream

我正在尝试写一个小的替代品i3status,这是一个与符合协议的i3bar通讯的小程序。他们通过stdin和stdout交换消息。

两个方向上的流都是json对象的无限数组。从i3bar到i3status(我要替换)的流的开始看起来像这样:

[
{"name": "some_name_1","instance": "some_inst_1","button": 1,"x": 213,"y": 35}
,{"name": "some_name_1","instance": "some_inst_2","button": 2,"x": 687,"y": 354}
,{"name": "some_name_2","instance": "some_inst","button": 1,"x": 786,"y": 637}
,{"name": "some_name_3","instance": "some_inst","button": 3,"x": 768,"y": 67}
...
Run Code Online (Sandbox Code Playgroud)

这是代表点击的对象的“数组”。该阵列将永远不会关闭。

我的问题现在是:解析此问题的正确方法是什么?

显然,我无法使用该json库,因为这不是有效的json对象。

mae*_*ics 5

编写一个自定义阅读器函数(或解码器),该函数执行“流数组解析”,如下所示:

  1. 读取并丢弃前导空格。
  2. 如果下一个字符不是a,[则返回错误(不能是数组)。
  3. 确实如此:
    1. 调用json.Decoder.Decode“下一个”项目。
    2. 产生或处理“下一个”项目。
    3. 读取并丢弃空格。
    4. 如果下一个字符是:
      1. 然后用逗号,继续#3中的for循环。
      2. 右括号]然后退出#3中的for循环。
      3. 否则返回错误(无效的数组语法)。