一、背景

由于项目中需要使用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的处理相关推荐

  1. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  2. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  3. C语言中“野指针”、“悬空指针”是什么?

    目录 1."野指针"(wild pointer) 2."悬空指针"(dangling pointer) 1."野指针"(wild point ...

  4. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  5. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. python global函数_如何使用python语言中的global关键字获取函数值

    在python语言中,如果在函数外层定义了一个全局变量a,函数内部又有一个同名的局部变量,想要这个全局变量的值改成为局部变量的值,可以使用global.下面利用一个实例说明如何实现这个场景,操作如下: ...

  7. c语言中的if语句_If ... C中的其他语句解释

    c语言中的if语句 Conditional code flow is the ability to change the way a piece of code behaves based on ce ...

  8. C 语言中 void* 详解及应用介绍

    void 在英文中作为名词的解释为 "空虚.空间.空隙",而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针" ...

  9. java 英文字符 字节_3、在JAVA语言中,每个英文字符占 个字节,每个中文汉字占( )个字节。...

    [判断题]中心原子中的几个原子轨道杂化时,必形成数目相同的杂化轨道. [单选题]集合 用区间表示正确的是 ( ) [单选题]15.Java语言的类间的继承关系是 [单选题]8.编译Java Appli ...

最新文章

  1. 新书来了!《ActionScript 3.0游戏设计基础(第2版)》
  2. linux nexus能备份吗,nexus 从Window迁移至Linux
  3. 你是PHP菜鸟,如果......
  4. python手机端秒杀_python实现淘宝秒杀脚本
  5. P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
  6. 32岁妈妈适合转行做软件测试吗,32+大龄妈妈,AMH偏低,可丽蓝助力好孕一次就中...
  7. Redis的管道pipeline
  8. 华为Mate30系列诠释真旗舰:9月26日在国内正式发布
  9. TrustBase团队完成subscript语言的Web3基金会Grant资助计划项目交付
  10. Latex调节目录间距\tableofcontents
  11. [转载] numpy功能快速查找
  12. 正则表达式校验特殊格式
  13. 计算机网络教室的使用记录表,计算机网络教室管理工作总结
  14. 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门
  15. Android-adb获取当前前台进程
  16. android 全局悬浮按钮,Android自定义APP全局悬浮按钮
  17. 三极管工作原理及测定
  18. ViewPager系列之ViewPager无限循环滑动
  19. sql内连接、左连接、右连接以及全连接查询
  20. 【定义】向量与向量组

热门文章

  1. 【题解报告】Leecode367. 有效的完全平方数——Leecode每日一题系列
  2. 【已解决】Error attaching to process: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versi
  3. 1027 Colors in Mars (20 分)_20行代码AC
  4. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
  5. linux安装trac+svn+apache+wike,windos中Trac+apache+svn的安装与配置
  6. mac11.5.2版本虚拟机SeaBIOS不引导,kvm虚拟机状态为pause
  7. java吧王者_java单排上王者!(一) java内存
  8. python之简单爬虫(爬取豆瓣出版社)
  9. 微软系统封装工具ImageX使用方法及实例介绍
  10. oracle查询表字段sql语句怎么写,oracle联合查询并更新一个表字段的sql语句