gpt4 book ai didi

json - 如何从 stdin 中解析一个无限的 json 数组?

转载 作者:IT王子 更新时间:2023-10-29 01:22:00 24 4
gpt4 key购买 nike

我正在尝试为 i3status 编写一个小的替代品,这是一个与符合 this 的 i3bar 通信的小程序。协议(protocol)。它们通过标准输入和标准输出交换消息。

双向的流都是一个无限大的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 对象。

最佳答案

编写一个自定义阅读器函数(或解码器),像这样执行“流式数组解析”:

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

关于json - 如何从 stdin 中解析一个无限的 json 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29421470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com