Sword cjson库函数使用

Posted zhanggaofeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sword cjson库函数使用相关的知识,希望对你有一定的参考价值。

/* cjson库的使用 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#include "cJSON.h"

/*
说明:
    组装成json效率并不高,并不推荐json,字符串远比json快,但是字符串表示不了对象,protobuf虽然快,但是依赖于第三方库,很棘手
*/

//数据解析
int testPause(const char * pcJson)

    cJSON *pstRoot = NULL;
    cJSON *pstNode = NULL;
    cJSON *pstFeat = NULL;
    cJSON *pstArray = NULL;
    cJSON *pstAudio = NULL;
    cJSON *pstRole = NULL;
    cJSON *pstTmp = NULL;
    int arraySize = 0;
    int i = 0, j = 0;
    int featSize = 0;

    if (NULL == pcJson)
    
        return -1;
    

    //解析json字符串
    pstRoot = cJSON_Parse(pcJson);
    if (NULL == pstRoot)
    
        return -1;
    

    do 
    
        //获取json对象
        pstAudio = cJSON_GetObjectItem(pstRoot, "audio");
        if (NULL == pstAudio)
        
            printf("--no audio info .---\n");
            break;
        

        //获取字符串型json对象的值
        printf("====audio info %s=======\n", pstAudio->valuestring);

        pstArray = cJSON_GetObjectItem(pstRoot, "array");
        if (NULL == pstArray)
        
            printf("--no array info .---\n");
            break;
        

        //提取json数组
        //1.获取数组长度
        arraySize = cJSON_GetArraySize(pstArray);
        if (0 == arraySize)
        
            printf("--no array info .---\n");
            break;
        

        for (i = 0; i < arraySize; i++)
        
            pstNode = cJSON_GetArrayItem(pstArray, i);
            if (pstNode)
            
                //获取角色信息
                pstRole = cJSON_GetObjectItem(pstNode, "role");
                if (NULL == pstRole)
                
                    printf("--no role info .---\n");
                    break;
                
                printf("====role info %d=======\n", pstRole->valueint);

                //获取声纹信息
                pstFeat = cJSON_GetObjectItem(pstNode, "feat");
                if (NULL == pstFeat)
                
                    printf("--no feat info .---\n");
                    break;
                

                //获取声纹长度
                featSize = cJSON_GetArraySize(pstFeat);
                if (0 == featSize)
                
                    printf("--no feat size info .---\n");
                    break;
                
                for (j = 0; j < featSize; j++)
                
                    pstTmp = cJSON_GetArrayItem(pstFeat, j);
                    printf("==feat[%lf]==\n", pstTmp->valuedouble);
                
            
        

        

     while (0);

    // 释放资源
    if (pstRoot)
    
        cJSON_Delete(pstRoot);
        pstRoot = NULL;
    

    return 0;


//数据组装
char * testAssemble(void)

    cJSON *pstRoot = NULL;
    cJSON *pstNode = NULL;
    cJSON *pstFeat = NULL;
    cJSON *pstArray = NULL;
    float aFeat[10] =  1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 0.0f ;
    char * pOutput = NULL;

    //创建普通json对象
    pstRoot = cJSON_CreateObject();
    assert(pstRoot);

    pstNode = cJSON_CreateObject();
    assert(pstNode);

    //创建float数组类型json对象
    pstFeat = cJSON_CreateFloatArray(aFeat, 10);
    assert(pstFeat);

    cJSON_AddNumberToObject(pstNode, "role", 1);
    cJSON_AddItemToObject(pstNode, "feat", pstFeat);

    //创建一个json对象数组
    pstArray = cJSON_CreateArray();
    assert(pstArray);

    //将一个json对象加入到json数组中
    cJSON_AddItemToArray(pstArray, pstNode);

    //布尔值添加
    cJSON_AddStringToObject(pstRoot, "audio", "test.wav");
    cJSON_AddItemToObject(pstRoot, "array", pstArray);

    //输出json字符串(内存需要自己释放)
    pOutput = cJSON_Print(pstRoot);

    // 释放资源
    if (pstRoot)
    
        cJSON_Delete(pstRoot);
        pstRoot = NULL;
    

    return pOutput;



int main()

    char * pcJson = NULL;

    pcJson = testAssemble();
    if (NULL == pcJson)
    
        printf("----[testAssemble]-----failed-----\n");
        return -1;
    

    //打印数据
    printf("===%s==\n", pcJson);

    printf("\n");

    //解析json
    testPause(pcJson);

    //释放资源
    if (pcJson)
    
        free(pcJson);
        pcJson = NULL;
    

    printf("-----ok------\n");

    getchar();

    return 0;

 

以上是关于Sword cjson库函数使用的主要内容,如果未能解决你的问题,请参考以下文章

Sword - 为 Kotlin 函数增加代理功能

Sword pcre库函数学习一

Sword pcre库函数学习二

C语言调用cJSON库解析json

C语言调用cJSON库解析json

C语言调用cJSON库解析json