最近交互数据中用到JSON数据,很多年以前用过CJSON解析和生成JSON数据,貌似CJSON已经发展成为了libjson,本打算用libjson库,不过其提供的解析JSON方式采用了回调,是测试过程中总是出错,无赖放弃。parson(http://www.oschina.net/p/parson)基于点分K/V形式来设置和获取值,非常方便使用,官方提供了大量的测试程序。parson的使用也非常方便,一个头文件,一个c文件,引用编译即可。

下面是一个使用parson解析JSON数据的例子,主要测试复杂的json结构。

{"desString":"P7svG%2BLoUZEbB8Le5jP1%2BpuX2OVWLE4xWMzFcYFCRvNvDlcFVm%2B8z2VFO%2F%2BaEB8UAMa%2FZ0GGhooGNMWFE98Zmw%3D%3D","caller":{"mobile":"13996130361"},"accountId":"b5091dc91d700c6bf714e5fc446797d3","tmpTime":1428545890,"otherParam":"{id:12}","participant":[{"mobile":"18623582801"}],"servletUrl":"http://192.168.1.1:8090/xdr"}

    JSON_Value *root_value=NULL;
    root_value = json_parse_string(jsonstr);
    JSON_Object *root_object;
    if(json_value_get_type(root_value) == JSONObject)
    {
        root_object = json_value_get_object(root_value);
        const char *desString = json_object_get_string(root_object, "desString");
        if(desString!=NULL)strncpy(pPost->desString,desString,LENGTH128-1);
        const char *accountId = json_object_get_string(root_object, "accountId");
        if(accountId!=NULL)strncpy(pPost->accountId,accountId,LENGTH32);
        double tmpTime = json_object_get_number(root_object, "tmpTime");
        const char *caller = json_object_dotget_string(root_object,"caller.mobile");
        if(caller!=NULL)strncpy(pPost->caller,caller,LENGTH16-1);
        const char *servletUrl = json_object_dotget_string(root_object,"servletUrl");
        if(servletUrl!=NULL)strncpy(pPost->servletUrl,servletUrl,LENGTH128-1);
        const char *otherParam = json_object_dotget_string(root_object,"otherParam");
        if(otherParam!=NULL)strncpy(pPost->otherParam,otherParam,LENGTH128-1);         JSON_Array *array;
        array = json_object_get_array(root_object, "participant");
        int i =0;
        for(i;i<json_array_get_count(array);i++)
        {
            JSON_Object *tmp = json_array_get_object(array,i);
            if(tmp!=NULL)
            {
                const char *mobile = json_object_get_string(tmp,"mobile");
                if(mobile!=NULL)strncpy(pPost->callee,mobile,LENGTH16-1);
            }
        }
    }
    if(root_value)json_value_free(root_value);

parson json解析的更多相关文章

  1. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  2. Json解析工具的选择

    前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson ...

  3. iOS json 解析遇到error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed.

    Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 38 ...

  4. Android之JSON解析

    做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSO ...

  5. Android总结之json解析(FastJson Gson 对比)

    前言: 最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和 ...

  6. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  7. iOS json解析的几种方法 NSJSONSerialization,JSONKit,SBJson ,TouchJson

    相关的第三方类库大家可以去github上下载 1.NSJSONSerialization 具体代码如下 : - (void)viewDidLoad { [super viewDidLoad]; NSD ...

  8. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  9. Json解析工具Jackson(简单应用)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...

随机推荐

  1. 循环中点击单个事件(巧用this,指向当前对象)

    <em id='show' value="<?php echo $member['phone']; ?>" class="sui">&l ...

  2. makefile文件写法解析

    一.makefile文件示例 makefile文件并不难写,一个makefile模版如下所示,所有makefile文件在此基上稍微修改就可以了. # this is a makefile #这一行是注 ...

  3. summary_22rd Nov 2018

    一. 列表:记录同种属性的多个值 定义:在[]中用逗号分隔开多个任意的值 类型转换:L=list( )  括号中的内容必须是可迭代类型,包括字符串,列表,字典等 常用操作和内置方法: 1.按照索引位置 ...

  4. CentOS安装JDK-tar.gz文件

    1.下载JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html. 测试 ...

  5. 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询

    2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWH ...

  6. window有哪些属性?

    self:self代表自己,相当于window. parent:返回父窗口. top:返回顶层窗口,和parent作用一样. opener:窗口开启者. status:设置窗口状态栏的文本.

  7. day25-python操作redis一

    1.     Python操作nosql数据库 NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2 ...

  8. day6-if,while,for的快速掌握

    python的缩进和冒号 python之所以如此简单,归功于它的缩进机制,严格的缩进机制是的代码非常整齐规范,赏心悦目,提高了可读性,在一定意义上提高了可维护性,但对于从其他语音转过来的朋友如:jav ...

  9. new_images

    /home/westward/Pictures/Screenshot from 2017-03-19 20:23:55.png

  10. NIO完成网络通信(一)

    NIO:即非阻塞式IO 视频教程:  https://chuanke.baidu.com/v1982732-211322-1316084.html 使用步骤: 1.创建 ServerSocketCha ...