【发布时间】:2015-06-07 21:51:45
【问题描述】:
我正在尝试为 i3status 编写一个小替代品,这是一个与 i3bar 通信并符合 this 协议的小程序。他们通过标准输入和标准输出交换消息。
两个方向的流是一个无限的 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}
...
这是代表点击的对象“数组”。数组永远不会关闭。
我现在的问题是:解析这个的正确方法是什么?
显然我不能使用 json 库,因为这不是一个有效的 json 对象。
【问题讨论】:
-
肯定会有更好的办法,不过最简单的大概就是把开头的
,去掉,然后用json库解析剩下的行:那就是json对象,对吧? (并且在留下此评论时可能会发布更好的方法,因此请改用它;)这就是为什么这不是答案:)) -
没错。其余的只是一个 json 对象。我不能做这种骇人听闻的事情。我会恨自己;)
-
严格来说,这不是有效的 JSON。一个有效的 JSON 数组必须有一个终止的右方括号 (
]),这意味着它不能是无限的。我不希望 JSON 解析库能够通过正常方式处理它,尽管如果它公开它,您可能能够调用它的一些解析功能。
标签: json go jsonstream