单片机学习小组
直播中

吴藩

9年用户 765经验值
擅长:可编程逻辑
私信 关注

JSON是什么?JSON语法规则有哪几点

JSON是什么?JSON语法规则有哪几点?

回帖(1)

周梦斌

2022-2-25 14:10:55
1.JSON简介

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。类似 XML,但是比XML 更小、更快,更易解析。

2.JSON语法

JSON 是存储和交换文本信息的语法。既然是语法,就有它的规则。
JSON语法规则总结起来就四点:
1.数据在名称/值对中
2.数据由逗号分隔
3.花括号保存对象
4.方括号保存数组
具体语法实例请自行查询

3.C语言实现


C语言打包和解析JSON有相关库函数下载。
核心文件:cJSON.h、cJSON.c
将cJSON.h、cJSON.c添加到工程中即可使用。
实例:

#include
#include
#include "cJSON.h"
#include "stdbool.h"

typedef int BOOL;
#define TRUE 1
#define FALSE 0
char* strJson;
char* MakeJson()//打包
{
    cJSON *temp = cJSON_CreateObject();
    if (temp == NULL)
    {
        //创建失败
        return FALSE;
    }
    //加入节点(键值对)
    cJSON_AddStringToObject(temp, "firstname", "Brett");
    cJSON_AddStringToObject(temp, "lastName", "McLaughlin");
    cJSON_AddNumberToObject(temp, "id", 1);
    cJSON * array = cJSON_CreateArray();
    if (array == NULL)
    {
        //创建失败
        return FALSE;
    }
    cJSON_AddItemToArray(array, temp);

    cJSON *root = cJSON_CreateObject();
    if (root == NULL)
    {
        //创建失败
        return FALSE;
    }
    cJSON_AddItemToObject(root, "programmers", array);

    strJson = cJSON_Print(root);
    cJSON_Delete(root);
}

BOOL ParseJson(const char* jsonStr)//解析
{


    cJSON* root = cJSON_Parse(jsonStr);

    BOOL ret = FALSE;

    if (root != NULL)
    {
        cJSON* programmersNode = cJSON_GetObjectItem(root, "programmers");
        if (programmersNode != NULL)
        {
            int iSize = cJSON_GetArraySize(programmersNode);
            if (iSize == 1)    //iSize 表示数组个数
            {
                cJSON* programmers[3] = {0};
                int i=0;
                for (i = 0; i < iSize ; ++i)
                {
                    programmers = cJSON_GetArrayItem(programmersNode, i);
                    if (programmers != NULL)
                    {
                        cJSON* firstName = cJSON_GetObjectItem(programmers, "firstName");
                        cJSON* lastName = cJSON_GetObjectItem(programmers, "lastName");
                        cJSON* id = cJSON_GetObjectItem(programmers, "id");
                        if (firstName != NULL && lastName != NULL && id != NULL)
                        {   
                            printf("id:%dn",id->valueint);
                            printf("FirstName:%sn",firstName->valuestring);
                            printf("lastName:%sn",lastName->valuestring);
                        }
                        else
                        {
                            cJSON_Delete(root);
                            return FALSE;
                        }
                    }
                }
                ret = TRUE;
            }
        }
    }
    cJSON_Delete(root);
    return ret;
}

int main()
{
    MakeJson();
    if(strJson)printf("%sn",strJson);                            //输出json
    else printf("MAKE NOn");                                     //打包失败
    if(ParseJson(strJson)) printf("ParseJson OKn"); //解析成功
    else printf("ParseJson NOn");                             //解析失败
    free(strJson);
    return 0;
}

**注:上述代码可能存在一些内存泄露,正在完善
**
举报

更多回帖

发帖
×
20
完善资料,
赚取积分