JSON介绍及代码示例

2023-11-20

了解json

JSON是什么?JSON是JavaScript Object Notation的缩写,它是一种数据交换格式。

在JSON出现之前,大家一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,任何正常的软件开发人员碰到XML都会感觉头大了,最后大家发现,即使你努力钻研几个月,也未必搞得清楚XML的规范。

终于,在2002年的一天,道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式

为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""

json数据类型

  • number:和JavaScript的number完全一致;相当于C中的int类型

  • boolean:就是JavaScript的true或false;相当于c++中的bool类型

  • string:就是JavaScript的string;相当于c++的string类型

  • null:就是JavaScript的null;相当于C的NULL类型

  • array:就是JavaScript的Array表示方式——[];相当于C的数组

  • object:就是JavaScript的{ ... }表示方式。相当于C++的类或者C的结构体

注意:json的数据类型在源码实现中和具体的编程语言有关,比如boolean在C中并没有相应的类型,C相关的实现库可能会用0和1表示。

格式规范

  • json以大括号起始和结尾

  • 内容都是以键值对的形式存在

  • 所有的键都是字符串

  • 值的类型不一定,属于JavaScript 的基本数据类型

  • 每个键值对以,分割

  • 最后一个键值对不加逗号

JSON基本操作

Json序列化:可以理解为利用程序生成Json字符串的过程。

Json反序列化:可以理解为利用程序将已有的Json字符串解析出我们需要的值的过程。

json格式校验

https://www.bejson.com/

使用cJson

cJSON的github地址(相当于官方源码地址)

https://github.com/DaveGamble/cJSON

cJSON 使用详解

https://blog.csdn.net/qq_32172673/article/details/88305781

JSON的简单介绍以及C语言的JSON库使用

https://www.cnblogs.com/liunianshiwei/p/6087596.html

C语言:cJSON库用法详解

代码示例

使用cJSON库对下面的JSON文件进行反序列化操作。将下面内容存为文件,读取后解析,推荐使用标准IO(fread)解析)。

{
    "ver": "1.0",
    "login": {
        "user": "zhangsan",
        "pwd": "123456"
    },
    "data": [{
      "key": 1,
      "type": 2,
      "val": "10"
    },
    {
      "key": 2,
      "type": 1,
      "val": "0"
    },
    {
      "key": 3,
      "type": 3,
      "val": "22.5"
    }
    ]
}
#include <stdio.h>
#include "cJSON.h"
int main(int argc, char const *argv[])
{
    // 1.打开文件
    FILE *fp;

    fp = fopen("data.json", "r");

    if (fp == NULL)
    {
        perror("open err");
        return -1;
    }

    // 读取文件
    char buf[1024] = {0};
    size_t n = fread(buf, 1024, 1, fp);

    if (n < 0)
    {
        perror("read err");
        return -1;
    }
    // printf("read buf = \n%s\n", buf);

    //反序列化
    cJSON *root;
    root = cJSON_Parse(buf);
    if(NULL == root)
    {
        printf("parse err\n");
        return -1;
    }

    cJSON *item = cJSON_GetObjectItem(root, "ver");
    printf("key = %s, val = %s\n", item->string, item->valuestring);

    //解析login节点
    cJSON *login_item = cJSON_GetObjectItem(root, "login");
    item = cJSON_GetObjectItem(login_item, "user");
    printf("key = %s, val = %d\n", item->string, item->valueint);

    //解析数组

    cJSON *data_item = cJSON_GetObjectItem(root, "data");

    int size = cJSON_GetArraySize(data_item);

    for (size_t i = 0; i < size; i++)

    {
        cJSON *tmp = cJSON_GetArrayItem(data_item, i);
        item = cJSON_GetObjectItem(tmp, "key");
        printf("name = %s, val = %d\n", item->string, item->valueint);
    }

    return 0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSON介绍及代码示例 的相关文章

随机推荐

  • sql注入万能密码 admin 'or '1'='1'# (# 为注释后面内容)

    admin or 1 1 为注释后面内容 James or 1 1 admin or 4 4 admin or 1 1 admin888 or a a admin or 2 2 a having 1 1 a having 1 1 admin
  • 《Computer Graphics with OpenGL》计算机图形学读书笔记 02——计算机图形学软件

    这里是 Computer Graphics with OpenGL 英文原版第四版的读书笔记 预计每一章写一篇读书笔记 本篇为第二章 简要介绍计算机图形学的相关软件 图形学相关软件可分为两类 专业类 综合类 其中 专业类为非编程人员准备 可
  • 【stata】处理重复值之duplicates drop_all和duplicates drop_all, force区别(整行数据重复和单元格数据重复)

    关于stata重复值处理常用的duplicates函数 很疑惑为什么要加force 区别如下图所示 一 duplicates常用语法 duplicates report varlist if in 报告某个变量出现的次数 duplicate
  • 推荐算法(Recommended Algorithms)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • IBM Rational Rose2007 安装及故障处理

    因项目需要 最近需要安装IBM Rational Rose 在此过程中遇到一些问题 并简单记录下来 以帮助其他人来解决类似的问题 安装环境 WIN 10 Pro 软件版本 Rose 2007 安装路径 F Program Files x86
  • matlab中contourf函数怎么用_matlab中contour 函数的用法(绘制等高线)[图]

    matlab中contour 函数的用法 绘制等高线 图 08 11栏目 技术 TAG matlab等高线 matlab等高线 原文 contour 矩阵的等高线图 https www jhua org 全页折叠 https www jhu
  • zimg服务器搭建手记

    zimg是由国人开源的一个高性能的图片服务器 相关介绍和代码可从github上获取 https github com buaazp zimg 1 安装Openssl 这个很关键 必须先安装 wget http www openssl org
  • 程序员如何在春节假期避免加班?

    点击上方 程序人生 选择 置顶公众号 第一时间关注程序猿 媛 身边的故事 平日奋战在修复BUG前线的 IT界精英程序员们 马上就要开始新年假期了 平时加班忙成狗的你 今年过年想好怎么做才能不加班了么 回想2017年 那轰动全国的被迫加班 莫
  • 数据库系统概念-读写锁、意向锁、行表锁

    目录 1 MySql中的锁分类 2 读写锁和意向锁 共享锁 s 排他锁 X 意向共享锁 IS 和意向排他锁 IX 意向锁的作用 3 数据库行锁 表锁 封锁粒度 4 什么时候使用表锁 1 MySql中的锁分类 按照锁粒度分类 表锁和行锁 即这
  • emacs org-mode嵌入graphviz代码,并执行

    一 graphviz是一种依赖代码实现的画图工具 二 org mode是emacs里的一种文档编辑模式 堪称神器 三 org mode嵌入graphviz代码 并执行 意义 步骤 问题 一 graphviz是一种依赖代码实现的画图工具 特点
  • 2020年产品经理面试题-----产品经理面试题

    1 介绍一下你自己 介绍一下自己的姓名 年龄 毕业院校 工作经历 简单的介绍 保持在三分钟以内 给面试官问问题的时间 工作经历主要讲一些你牛逼的工作经历 例如 你加入XX公司以后 销售额增加了多少 用户翻了多少倍 这样一些 有些人工作经历比
  • webpack5 配置&使用 文档(大全)

    一 起步 1 基本安装 首先我们创建一个目录 初始化 npm 然后 在本地安装 webpack 接着安装 webpack cli 此工具用于在命令行中运行 webpack mkdir webpack demo cd webpack demo
  • 浅拷贝、深拷贝和写时拷贝

    浅拷贝 指对象在复制时 只对对象的数据成员进行简单地赋值 而不复制对象本身 新旧对象还是共享同一块内存即只是增加了一个指针指向已存在的内存地址 因为共享同一份资源 当一个对象将这份资源释放掉 而此时另一个对象并不知道该资源已经被释放 当再次
  • element ui 对话框el-dialog关闭事件,清空填写的数据

    原文链接 https blog csdn net rickiyeat article details 76595390 通常会有需求 在关闭弹框后需要清空填写的数据 这时候就需要关闭事件了
  • UE编辑器下简单把 excel格式的表格转换为wiki支持的表格

    觉得 wiki下 mediawiki 导入excel和word表格好麻烦 微软自带的offic插件wiki转换工具一直都安装不上 为了更新wiki内容只能手动来做了后来总结了以下手动方法 1 复制编辑好的Excel表格到记事本 用ue打开
  • 关于构造函数

    使用构造函数 两种使用构造函数的初始化方式 Stock food Stock World 250 1 25 等价于 Stock garment Furry 50 2 5 将构造函数与new一起使用 new可以调用构造函数 Stock pst
  • 利用input上传图片以及文件视频音频等

    这里说的input指的就是我们常用的
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • 一个超级棒的VUE流程设计器--easy-flow开箱即用

    今天小编推荐一款流程设计器easy flow easy flow基于VUE ElementUI JsPlumb的流程设计器 通过 vuedraggable 插件来实现节点拖拽 功能介绍 支持拖拽添加节点 点击线进行设置条件 支持给定数据加载
  • JSON介绍及代码示例

    了解json JSON是什么 JSON是JavaScript Object Notation的缩写 它是一种数据交换格式 在JSON出现之前 大家一直用XML来传递数据 因为XML是一种纯文本格式 所以它适合在网络上交换数据 XML本身不算