使用automake的编译过程如下:
使用cmake编译的过程如下:
cmake可选的几个编译选项为:
要使用json-c,最简单的方式是包含json.h头文件即可,或者最好是下列更具体的头文件之一:
详细且全面的API介绍文档: http://json-c.github.io/json-c/
JSON-C支持的JSON对象类型有7种:
下面系列函数用于创建一个JSON对象:
给JSON对象增加字段(不会增加引用计数):
删除json对象的指定字段,被删除的对象引用计数减去1,如果这个val没有更多的所有者,这个key对应的val被free,否则这个val的引用保存在内存中:
增加一个元素到json数组的末尾,obj引用计数不会增加,增加字段的方式更加紧凑;如果需要获取val的引用,需要用json_object_get()来传递该对象:
替换json数组中的值:
json数组的排序,这里需要自己写排序函数:
获取json对象的长度,依据字段的数目:
获取json对象的哈希表:
获取对象的数组列表:
获取json的类型:
获取json数组对象的长度:
获取json对象的bool值,int和double对象是0转换为FALSE,否则返回TRUE;非0长度的字符串返回TRUE;其他对象非空的话,返回TRUE:
获取json对象的长度,如果参数不是string类型的json,返回0:
按照索引获取json数组的对象:
转换json对象到c字符串格式:
获取JSON中指定类型的数值:
将字符串转换为json对象:
以下两个函数配合使用,前者获取该对象指针的所有权,引用计数加1,如果对象已经被释放,返回NULL;后者引用计数减1,如果对象已经被释放,返回1:
类型判断:
json_util.h提供了有关文件读写 *** 作的函数,这个文件的内容是json格式的:
在 STM32 移植 cJSON 库后,使用 cJSON_Parse() ,解析失败。
使用 cJSON_GetErrorPtr() 分析出以下错误:
而当去掉 serial_no 字段后,则能够解析成功。
当解析的的数据比较长时,会解析失败,但是短的数据则没有问题,后面排查是因为 cJSON 解析需要用到的内存比较大,溢出导致解析失败。
查看 STM32 启动文件。如 startup_stm32f407xx.s ,发现:
增大空间后,问题解决
• 由 Leung 写于 2022 年 6 月 30 日
• 参考: STM32工程使用cjson库解析数据失败的原因
对比
准备数据
实体类:
定义:
使用DataContractJsonSerializer
帮助类:
用法:
输出:
使用JavaScriptSerializer
// using System.Web.Script.Serialization
var jser = new JavaScriptSerializer()
var json = jser.Serialize(new List<Person>() { p1, p2 })
var persons = jser.Deserialize<List<Person>>(json)
使用Silverlight
使用JSON.NET
输出:
LINQ:
其他:
输出:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)