问题标签 [jsmn]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - 如何在嵌入式系统上用 jsmn 解析一个小的 JSON 文件?
我需要在嵌入式系统上解析一个小的 JSON 文件(只有 10K RAM/闪存)。JSON是:
jsmn看起来很适合这个要求,但它不像大多数 JSON 解析器,因为它只给你令牌。我试过了,但无法弄清楚。
有人可以分享一个如何用jsmn解析它的例子吗?
c - 如何使用 jsmn 构建 C 脚本?
我正在尝试编写一个简单的 ANSI C 脚本,该脚本使用 cURL 进行一些 REST 调用,然后使用Jsmn解析 JSON 响应主体。我已经完成了所有 cURL 部分的工作,但我不知道如何将事情与 jsmn 正确连接起来。因此,首先,我一直在尝试构建他们的示例。
例如,在克隆 repo 之后,有一个 examples/ 目录,其中包含一个名为 simple.c 的文件。我试图用这个命令来构建它:
但这导致了一个看起来像这样的错误响应:
我承认我对在 ANSI C 和所有 Linux 中做任何事情都很陌生。我相信我必须告诉gcc
链接源,但我不确定如何正确地做到这一点。
只是为了让你知道我到目前为止所做的尝试,在make
按照自述文件的指示运行后,我将生成的 jsmn.o 和 libjsmn.a 文件复制到 /usr/local/lib,并在 jsmn.o 上 chmod'ed 0755文件。然后我通过发出以下命令再次尝试:
但不幸的是,它仍然有完全相同的错误输出。
c - JSMN API 的问题
我正在努力弄清楚 jsmn 库是如何工作的。这是我当前的代码及其产生的内容。我的问题仅基于 derefBy 函数
我知道我必须返回一个 jsmn 标记,但我不太确定如何仅使用名字或姓氏来创建它。这是使用此函数的示例代码。
我的困惑是基于结果。我得到的似乎完全随机
或者我得到这个而不改变任何东西
我希望它简单地产生
fmt 是一个由 's' 和 'd' 字符组成的字符串,它描述了剩余的参数是对象键还是数组索引。例如, derefBy(marker,"sds",key1, sub1, key2) 将首先通过 key1 解引用标记,然后索引 sub1,最后是 key2
c - 尝试读取 json 文件时出现分段错误
我正在尝试使用 jsmn 解析 json 文件,但是在运行应用程序时出现分段错误。我正在使用 C 并在 Ubuntu 机器上编译。
请在下面找到代码片段:
当读取的文件操作完成时,我在行后出现分段错误。
在调试时,此时f
包含0x00
值,这意味着它无法识别文件。
当文件存在于该位置时,为什么会发生这种情况?
我尝试改变路径,但仍然是同样的问题。
c - jsmn解析器:如何使用jsmn解析器获取json字符串中的所有键
我正在使用 jsmn 解析器(链接)来解析从 AWS 云接收到的 delta 有效负载。有效载荷格式可以如下:
我从上面的字符串中想要的是所有键都存在于接收到的 JSON 有效负载中。像“key1”,“key2”和“key3”出现在上面的字符串中。
我可以使用 jsmn 提供的“findToken”API 解析各个键,但我想要一些通用的解决方案,通过它我可以知道其中存在哪些所有键,而不是比较我列出的每个键。
那么,任何人都可以提供任何提示/建议,通过使用 jsmn 解析器可以实现上述目标吗?
我正在使用嵌入式 C aws SDK。
提前致谢!
json - jsmn解析器:如果值与键名相同,则解析不正确
我正在使用 jsmn 解析器(链接)来解析有效负载。有效载荷格式可以如下: { "ver":"01", "elem_cnt":2, "1":"india", "2":"usa" } 尝试解析 key value = “2” i我得到的值是“1”而不是“usa”。
那么,任何人都可以提供任何提示/建议,通过使用 jsmn 解析器可以实现上述目标吗?
c - 仅标头的 C“库”不是浪费吗?
我正在查看一个只有标头的 C“库”:https ://github.com/zserge/jsmn/blob/master/jsmn.h
据我了解,这段代码将被编译到 .c 文件包含的每个目标文件中jsmn.h
,浪费空间。
(文件的函数定义在里面#ifndef JSMN_HEADER
,因此您可以通过定义 JSMN_HEADER 将其用作“传统”头文件。)
- 为什么没有把它写成“传统”
.c
和.h
配对? - 链接器是否足够聪明,可以在目标文件之间重复功能相同的定义?我会预料到“重复符号”错误。
- 将代码放在标头中会给 C 带来什么好处?(不是 C++。)
#define JSMN_HEADER
如果在导入之前使用,您从哪里获得函数定义?- 只是
jsmn.h
头部是一个聪明的把戏,我可以从中学习吗?