gpt4 book ai didi

json - 防止使用 common-lisp YASON 库解析 JSON 节点

转载 作者:行者123 更新时间:2023-12-01 06:31:28 26 4
gpt4 key购买 nike

我在 common-lisp 中使用 Yason 库,我想解析一个 json 字符串,但希望解析器不解析它的节点。
通常用这样的例子:

{
"metadata1" : "mydata1",
"metadata2" : "mydata2",
"payload" : {...my long payload object},
"otherNodesToParse" : {...}
}

如何设置 yason 解析器来解析我的 json 但跳过有效负载节点并将其保留为 json 格式的字符串。

使用:假设我只想要信封数据(不是有效负载的所有内容),并将有效负载按原样(作为 json 字符串)转发到另一个系统。

如果我解析整个 json(包括有效载荷),然后将有效载荷重新编码为 json,效率很低。有效载荷大小也可能非常大。

最佳答案

您如何知道有效载荷对象的末尾在流中的什么位置?您通过解析流来做到这一点:如果您不解析流,您根本无法知道对象的末尾在哪里:这就是 JSON 语法的本质(因为它是CL 的默认语法)。例如,您可以知道在何处继续之后的区别的唯一方法

{x:1}

及之后

{x:1.2}

是通过解析这两个东西。

所以你必须解析整个事情。

所以你的问题的答案是:你不能这样做。


您可以(但我认为,使用 YASON 不能)决定您不想构建一个作为解析结果的对象。也许,如果您正在解析的流对应于具有随机访问权限的内容,例如字符串或文件,您可以记下流中的开始和结束位置,以便稍后从中提取与未解析数据相对应的字符串(或者您可以边走边建。

看起来好像 CL-JSON 可以实现部分或全部这些功能,但您必须为此努力。

除非您正在阅读的对象是巨大的,否则这样做的好处似乎毫无疑问。如果你真的想高效地做这样的事情,你需要一个序列化方案来告诉你事情有多长。

关于json - 防止使用 common-lisp YASON 库解析 JSON 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690536/

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