jansson数据提取

本文详细介绍了如何利用jansson库在C语言环境中解析和提取JSON数据,包括创建JSON对象、读取键值对、遍历JSON数组等关键步骤,帮助开发者更好地理解和操作JSON数据。
摘要由CSDN通过智能技术生成
1、支持按照表名、记录号、JSONPATH从原始数据中提取指定字段的值
2、支持按照表名从原始数据中获取有多少条记录
3、支持按照表名、记录号和JSONPATH从原始数据中获取指定内层json_array的记录数


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <jansson.h>

 union type
  {
    long INT;
    int BOOL;
    double  DOUBLE;
    char  STRING[100];
    json_t* VALUE;
  };
  struct json_value
  {
    char  json_type[30];//存放json的类型
    union type var;//存放json的value
  };
struct my_json
{
  int num_bottom;//存放指定内层的记录数
  json_t* value; //存放定位到的json
};
struct json_count
{
  json_t *root;//用于存放从gmdata文件加载的json数据
  int count;//用于存放表名最外层的记录数
};


void get_value_by_json(json_t* root,struct json_value* json)//获取json的类型和数据
{
  if(root==NULL)
  return;
  memset((*json).json_type,0,sizeof((*json).json_type));
  memset((*json).var.STRING,0,sizeof((*json).var.STRING));
    switch(json_typeof(root))
  {
      case JSON_OBJECT :
      {
      strncpy((*json).json_type,"JSON_OBJECT",sizeof((*json).json_type));
      (*json).var.VALUE=root;
      }
      break;
      case JSON_ARRAY :
      {
        strncpy((*json).json_type,"JSON_ARRAY",sizeof((*json).json_type));
        (*json).var.VALUE=root;
      }
      break;
      case JSON_STRING :
      {
        strncpy((*json).json_type,"JSON_STRING",sizeof((*json).json_type));
        strncpy((*json).var.STRING,json_string_value(root),sizeof((*json).var.STRING));
      }
      break;
      case JSON_INTEGER:
      {
        strncpy((*json).json_type,"JSON_INTEGER",sizeof((*json).json_type));
       (*json).var.INT=json_integer_value(root);
      }
      break;
      case JSON_REAL :
        {
        strncpy((*json).json_type,"JSON_REAL",sizeof((*json).json_type));
       (*json).var.DOUBLE=json_real_value(root);
      }
      break;
      case JSON_TRUE :
      {
        s
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值