这里主要是举例说明一下假设通过yajl获取json中的值。

对于array和object来说,获取的方式略有不同,详细能够參考以下的代码。

我仅仅是从网上搜集信息。知道有这么一种方法。假设还有别的方法。请各位高手指点一下

首先,先贴出须要解析的json语句

[
"source",
"abc",
{"key1":"value1"}
]

然后就是关键所在了,这段代码主要是针对上面的json语句来写的。并不是对全部json语句都适用。

#include <stdio.h>
#include <string.h>
#include <yajl/yajl_tree.h> static unsigned char fileData[65536]; int main(int argc, char **argv)
{
size_t rd = 0;
yajl_val node; //define yajl_val_s * yajl_val;
FILE *fp;
char errbuf[1024];
const char *json_file_path = "json_string";
int i;
int array_num = 0;
yajl_val obj; fp = fopen(json_file_path, "r");
rd = fread((void *)fileData, sizeof(fileData), 1, fp);
const char *key[] = { "key1", (const char*) 0}; //用于在object对象中查找有没有key为"key1"的。 node = yajl_tree_parse((const char *)fileData, errbuf, sizeof(errbuf)); if(node == NULL) {
fprintf(stderr, "parse error:");
if(strlen(errbuf))
fprintf(stderr, "%s\n", errbuf);
else
fprintf(stderr, "unkonwn error\n");
return 1;
} if(node && YAJL_IS_ARRAY(node)) {
array_num = node->u.array.len;
printf("Top level of json string is array, has %d elements\n", array_num);
for(i=0;i<array_num;i++) {
yajl_val obj = node->u.array.values[ i ];
if(!YAJL_IS_OBJECT(obj)) { //获取数组中的元素
if(YAJL_IS_STRING(obj)) {
printf("%d, value = %s\n", i, obj->u.string);
}
} else { //获取object中的元素
printf("%d elements is object\n", i);
yajl_val v = yajl_tree_get(obj, key, yajl_t_string);
if (v) {
printf("%s : %s\n", key[0], YAJL_GET_STRING(v));
} else {
printf("no such node: %s \n", key[0]);
}
}
}
} return 0;
}

执行结果为:

Top level of json string is array, has 3 elements
0, value = source
1, value = abc
2 elements is object
key1 : value1

这里就行获取到数组中的值。并打印出来,对于数据中包括的object。也做了独立的处理,把响应的键值对也打印出来了。

通过YAJL获取json中的值的更多相关文章

  1. for in 循环获取json中的键(key)与值(value)

    一 .for in 循环 1.获取json中的键(key)与值(value): var data = {name:'张三',age:'20岁',sex:'男'}; for (var a in data ...

  2. 1.4.1 对象与JSON转化 1.4.2 JSON与List集合转化 1.1.1 获取json中的属性 day10-05

    1.1.1 对象与JSON转化 @Test public void toJSON() throws IOException{ Jedis jedis = new Jedis("192.168 ...

  3. 安卓Android控件ListView获取item中EditText值

    可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...

  4. ThinkPHP 获取配置文件中的值

    C('SPECIAL_USER'):获取配置文件中的值 存入数组

  5. jQuery遍历table中的tr td并获取td中的值

    jQuery遍历table中的tr td并获取td中的值 $(function(){ $("#tableId tr").find("td").each(func ...

  6. Android控件ListView获取item中EditText值

    能够明白,如今没有直接方法能够获得ListView中每一行EditText的值. 解决方式:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...

  7. VUE中获取url中的值

    如图:获取值 一:main.js中写入 const router = new VueRouter({ routes: [ { path: '/goodsinfo/:goodsId', componen ...

  8. React 修改获取state中的值

    14===> 修改state中的值 不能够直接修改 state = { num: 10 } 如 this.state.num+=12; 不能够直接修改 错误 通过 this.setState({ ...

  9. selenium+java:获取列表中的值

    selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...

随机推荐

  1. 【转】android 电池(二):android关机充电流程、充电画面显示

    关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...

  2. C#集合-队列

    本文来自:http://www.cnblogs.com/yangyancheng/archive/2011/04/28/2031615.html 队列是其元素以先进先出(FIFO)的方式来处理的集合. ...

  3. 关于MAC的pkg和mpkg的分别

    程序制作完毕后,在mac下通常的方法是要制作一个pkg的安装包,可是你会发现pkg和mpkg的文件出现的比較多,笔者也是经过了一定的试验和尝试,才了解到,pkg是单个文件的pkg,而mpkg事实上是多 ...

  4. java学习笔记day03

    1.二维数组,即一维护 int[][] arr1 = new int[3][2]; int[][] arr2 ={{2,4,3,6,22,7},{3,6,8,9},{10,13,24,5}}; pub ...

  5. 基于angularJS和requireJS的前端架构

    1.概要描述 1.1.angularJS描述:angularJS是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案.通过开发者呈现一个更高层次的抽象来简化应用的开发.最适合的就是用它来 ...

  6. UGUI实现的虚拟摇杆,可改变摇杆位置

    实现方式主要参考这篇文章:http://www.cnblogs.com/plateFace/p/4687896.html. 主要代码如下: using UnityEngine; using Syste ...

  7. VLC播放器架构剖析

    VLC采用多线程并行解码架构,线程之间通过单独的一个线程控制所有线程的状态,解码器采用filter模式.组织方式为模块架构 模块简述:libvlc                  是VLC的核心部分 ...

  8. 在EasyUI中统一判断是否有选中行,如果有则将选中行数据传入回调函数

    function procossWithSeletedData(func) { var rowData = $("#tbGrid").datagrid("getSelec ...

  9. 如何让你的SQL运行得更快

    人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS ...

  10. hdu3123GCC

    Problem Description The GNU Compiler Collection (usually shortened to GCC) is a compiler system prod ...