c语言中的jsonpath的处理
一、背景
由于项目中需要使用jsonpath,所以记录一下jsonpath的使用过程。
二、过程
2.1 在百度中查找不同的c语言的json库,发现没有可用的jsonpath功能模块。
2.2 随后找到了glib中有个json-glib有处理jsonpath的模块,随机,在ubuntu中安装json-glib,刚开始是通过源码来安装的,但是有些问题过不去,就采用了命令apt-get安装,安装命令如下:
apt-get install libjson-glib-1.0-0 libjson-glib-dev
2.3 随后,写了main.c函数来测试相关api函数调用,代码如下:
#include<stdio.h>
#include<json-glib/json-glib.h>
#include "json-glib/json-path.h"
#include "json-glib/json-generator.h"void main()
{char *json_data = "{ \"store\": {" "\"book\": [" "{ \"category\": \"reference\", \"author\": \"Nigel Rees\",""\"title\": \"Sayings of the Century\", \"price\": \"8.95\" },""{ \"category\": \"fiction\", \"author\": \"Evelyn Waugh\",""\"title\": \"Sword of Honour\", \"price\": \"12.99\" },""{ \"category\": \"fiction\", \"author\": \"Herman Melville\",""\"title\": \"Moby Dick\", \"isbn\": \"0-553-21311-3\",""\"price\": \"8.99\" },""{ \"category\": \"fiction\", \"author\": \"J. R. R. Tolkien\",""\"title\": \"The Lord of the Rings\", \"isbn\": \"0-395-19395-8\",""\"price\": \"22.99\" }""],""\"bicycle\": { \"color\": \"red\", \"price\": \"19.95\" }""}""}";char *path_str = "$.store.book[0].title";JsonParser *parser = json_parser_new();json_parser_load_from_data(parser, json_data, -1, NULL);//json_parser_load_from_file(parser, "./test_json.txt", NULL);JsonNode *result;JsonPath *path = json_path_new();json_path_compile(path, path_str, NULL);result = json_path_match(path, json_parser_get_root(parser));JsonGenerator *generator = json_generator_new();json_generator_set_root(generator, result);char *str = json_generator_to_data(generator, NULL);g_print("Results: %s\n", str);
}
编译的命令如下:
gcc main.c -g -o test_json_glib $(pkg-config --cflags --libs json-glib-1.0)
运行的结果如下:
参考的链接:https://developer.gnome.org/json-glib/stable/JsonPath.html#json-path-match
/
项目中采用的是jansson项目branch(json_path)的实现,具体链接:
https://github.com/akheron/jansson/compare/master...rogerz:json_path
使用的jansson版本是2.11版本,然后将改动加到2.11版本中,修改了相关api的参数的问题就可以使用json_path_get函数来查找path。
修改的地方如下:
然后编译即可。
目前相关wiki中描述,链接:https://github.com/rogerz/jansson/wiki/Json-Path
目前还不支持*的运算。
c语言中的jsonpath的处理相关推荐
- c语言中struct和c++中class实例对比
前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...
- 关于C语言中printf函数“输出歧视”的问题
目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...
- C语言中“野指针”、“悬空指针”是什么?
目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- python global函数_如何使用python语言中的global关键字获取函数值
在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...
- c语言中的if语句_If ... C中的其他语句解释
c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...
- C 语言中 void* 详解及应用介绍
void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...
- java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...
[判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...
最新文章
- 新书来了!《ActionScript 3.0游戏设计基础(第2版)》
- linux nexus能备份吗,nexus 从Window迁移至Linux
- 你是PHP菜鸟,如果......
- python手机端秒杀_python实现淘宝秒杀脚本
- P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
- 32岁妈妈适合转行做软件测试吗,32+大龄妈妈,AMH偏低,可丽蓝助力好孕一次就中...
- Redis的管道pipeline
- 华为Mate30系列诠释真旗舰:9月26日在国内正式发布
- TrustBase团队完成subscript语言的Web3基金会Grant资助计划项目交付
- Latex调节目录间距\tableofcontents
- [转载] numpy功能快速查找
- 正则表达式校验特殊格式
- 计算机网络教室的使用记录表,计算机网络教室管理工作总结
- 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门
- Android-adb获取当前前台进程
- android 全局悬浮按钮,Android自定义APP全局悬浮按钮
- 三极管工作原理及测定
- ViewPager系列之ViewPager无限循环滑动
- sql内连接、左连接、右连接以及全连接查询
- 【定义】向量与向量组
热门文章
- 【题解报告】Leecode367. 有效的完全平方数——Leecode每日一题系列
- 【已解决】Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versi
- 1027 Colors in Mars (20 分)_20行代码AC
- 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
- linux安装trac+svn+apache+wike,windos中Trac+apache+svn的安装与配置
- mac11.5.2版本虚拟机SeaBIOS不引导,kvm虚拟机状态为pause
- java吧王者_java单排上王者!(一) java内存
- python之简单爬虫(爬取豆瓣出版社)
- 微软系统封装工具ImageX使用方法及实例介绍
- oracle查询表字段sql语句怎么写,oracle联合查询并更新一个表字段的sql语句