JSON文件格式

article/2025/9/29 17:18:46

前言:

JSON是个什么东东?

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式,是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 具有自我描述性,更易理解
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

JSON书写格式
我们要知道JSON 语法是 JavaScript 对象表示语法的子集。那么遵循以下几个要求:

数据在键/值对中
数据由逗号分隔
中括号保存数组
大括号保存对象

三大分类:

1.object格式(对象格式)

JSON对象是一个无序的键值对的集合。一个JSON对象以“{”(左括号)开始,“}”(右括号)结束。每个“键”后跟一个冒号,键值对之间使用逗号分隔。如下:

//前后端分离,推荐后端返回给前端数据格式
{"idx" : 0 ,          /"st"    : "SUCCESS",  "data"   : [   {            //对象中嵌套数组,数组是返回的数据,"id"    : 1 ,"name"  : "xiaohong"},{"id"    : 2,name"  : "xiaoming"}]
}

还可以简单写法:key和数字可以不加""号,

2.arry格式(数组格式)
数组是值的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用逗号分隔。如下:

[{"id" : 1 ,"name" : "ming"},{"id" : 2 , "name" : "hong"}
]

3.数组+对象格式(比较复杂)
也就是数组里面套对象,或者对象里面套数组。或者对象里面套对象等等。在上面的例子中也可以体现出来。

这里强调一下,JSON 值可以是:数字(整数或浮点数),字符串(在双引号中),逻辑值(true 或 false),数组(在中括号中),对象(在大括号中)以及空指针null。

JSON Viewer软件

cJSON结构体解析

/* cJSON 类型定义: /
#define cJSON_Invalid (0)
#define cJSON_False (1 << 0)
#define cJSON_True (1 << 1)
#define cJSON_NULL (1 << 2)
#define cJSON_Number (1 << 3)
#define cJSON_String (1 << 4)
#define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_Raw (1 << 7) / raw json /
稍加翻译
/ cJSON 结构体: */
typedef struct cJSON
{
struct cJSON *next, *prev; //next/prev 遍历 数组或对象的前后指针. 或者使用GetArraySize/GetArrayItem/GetObjectItem
struct cJSON *child; // 当类型为Array或者Object指向第一个元素,否则=NULL
int type; // value的类型, 如上.
char *valuestring; // 当类型为String或者Raw时valued的字符串值 ,否则为NULL
int valueint;
double valuedouble; // 类型为Number时 valued的值。int valueint已经被弃用,建议使用cJSON_SetNumberValue函数来赋值,valuedouble也会被赋值
char *string; // key的字符串值.
} cJSON;

JSON的一些API函数

在这里插入图片描述
在这里插入图片描述
要生成的JSON文件如下:
在这里插入图片描述

//生成一个JSON文件
#include <stdio.h>
#include <string.h>
#include "cJSON.h"        //这一步后面会说到int main(int argc, const char* argv[])
{// 创建json对象cJSON* obj = cJSON_CreateObject(); // 创建子对象 - 品牌cJSON* brand = cJSON_CreateObject();// 添加键值对cJSON_AddItemToObject(brand, "factory", cJSON_CreateString("一汽大众"));cJSON_AddItemToObject(brand, "last", cJSON_CreateNumber(31));cJSON_AddItemToObject(brand, "price", cJSON_CreateNumber(83));cJSON_AddItemToObject(brand, "sell", cJSON_CreateNumber(49));cJSON_AddItemToObject(brand, "sum", cJSON_CreateNumber(80));// 创建json数组cJSON* array = cJSON_CreateArray();cJSON_AddItemToArray(array, cJSON_CreateNumber(124));cJSON_AddItemToArray(array, cJSON_CreateString("hello, world"));cJSON_AddItemToArray(array, cJSON_CreateBool(0));cJSON_AddItemToObject(brand, "other", array);cJSON_AddItemToObject(obj, "奔驰", brand);// 格式化json对象char* text = cJSON_Print(obj);FILE* fp = fopen("car.json", "w");fwrite(text, 1, strlen(text), fp);fclose(fp);return 0;
}

在这里插入图片描述

//解析自己写的JSON文件
#include <stdio.h>
#include <string.h>
#include "cJSON.h"int main(int argc, const char* argv[])
{if(argc < 2){printf("./a.out jsonfile\n");return 0;}// 加载json文件 FILE* fp = fopen(argv[1], "r");char buf[1024] = {0};fread(buf, 1, sizeof(buf), fp);cJSON* root = cJSON_Parse(buf);cJSON* subobj = cJSON_GetObjectItem(root, "奔驰");// 判断对象是否存在if( subobj ){// 获取子对象cJSON* factory = cJSON_GetObjectItem(subobj, "factory");cJSON* last = cJSON_GetObjectItem(subobj, "last");cJSON* price = cJSON_GetObjectItem(subobj, "price");cJSON* sell = cJSON_GetObjectItem(subobj, "sell");cJSON* sum = cJSON_GetObjectItem(subobj, "sum");cJSON* other = cJSON_GetObjectItem(subobj, "other");// 打印value值printf("奔驰:\n");printf("    factory: %s\n", cJSON_Print(factory));printf("    last: %s\n", cJSON_Print(last));printf("    price: %s\n", cJSON_Print(price));printf("    sell: %s\n", cJSON_Print(sell));printf("    sum: %s\n", cJSON_Print(sum));// 打印数组内容printf("    other:\n");if(other->type == cJSON_Array){for(int i=0; i<cJSON_GetArraySize(other); ++i){cJSON* node = cJSON_GetArrayItem(other, i);// 判断数据类型if(node->type == cJSON_String){printf("        %s  \n", node->valuestring);}if(node->type == cJSON_Number){printf("        %d\n", node->valueint);}if(node->type == cJSON_True){printf("        %d\n", node->valueint);}if(node->type == cJSON_False){printf("        %d\n", node->valueint);}}}}cJSON_Delete(root);fclose(fp);return 0;
}

注意:因为在cJSON库有一个C文件和一个头文件,所以只需复制cJSON.h并复制cJSON.c到项目源,然后在你写的源码中加上头文件.h即可。

参考博客:请点击查阅!


http://chatgpt.dhexx.cn/article/DcC5j01g.shtml

相关文章

编程小白自学Java开发FlyBird小游戏

本人在读大学生一枚&#xff0c;在上个月自学了半个月的Java&#xff0c;现在寒假放假有空闲时间&#xff0c;用三天肝爆出一款之前爆火的小游戏&#xff0c;FlyBird&#xff0c;用的是IDEA开发环境。 参考了B站代码帝国的教学思路&#xff0c;在面向对象和构造方法中花费了不…

java fly bird小游戏_java swing实现的小游戏flybird源码附带视频配置修改教程

大家好&#xff0c;今天给大家演示一下由Java swing实现的一款小游戏flybird&#xff0c;该游戏操作比较简单&#xff0c;点击鼠标确保小鸟不要触碰到柱子即可&#xff0c;该游戏可运行在Java环境下&#xff0c;jdk版本不限&#xff0c;下面我们来看看如何运行以及简单的修改游…

html+css+js实现小游戏flybird(完整版)

完整demo下载资源https://download.csdn.net/download/qq_30548105/10847675 从未做过前端的游戏&#xff0c;哪怕不是用引擎实现的小游戏也没做过&#xff0c;这次试了一下&#xff0c;参考了一些资料&#xff0c;资料也不是很完整&#xff0c;于是就自己补齐写了一个…

JS实现FlyBird

放假等毕业还是挺无聊的&#xff0c;正好闲着没事做就学了学JS&#xff0c;也算是重拾吧&#xff0c;照着视频写了一个&#xff0c;然后。。。视频源找不到了 1.环境和工具 windows10 WebStrom2018.1.4 测试直接用的webstrom里面的 2.运行截图 类似于这样&#xff0c;然后…

纯C语言编程-游戏之Fly Bird

基于纯C的小游戏&#xff0c;基本思想就是使用system("cls")和printf()函数不断刷新界面&#xff0c;捕获键盘事件&#xff0c;然后修改显示数组&#xff0c;并刷新界面。 之前有一款特别火爆的小游戏FlyBird&#xff0c;我们可以使用纯C语言实现&#xff0c;希望对…

飞翔的小鸟(FlyBird)游戏C语言编程(含撞柱子)

// 飞翔的小鸟.cpp #include "stdafx.h" #include <graphics.h> //图形库头文件 #include <stdlib.h> //Sleep #include <conio.h> //_getch()按键盘 #include <stdio.h> //C语言头文件 #include <time.h> //随机函数使…

【Unity】Fly Bird(游戏实战)(1)

对于Fly Bird 相信各位肯定不会陌生。&#xff08;在安卓5.0-7.0版本的系统中多次点击Android Version 就会出现这个游戏&#xff0c;快去试试吧~~ 7.0及以后就没有了~~就做不了示范了 ~~ 刚开始Unity&#xff0c;也是写的第一个游戏就是做一个Fly Bird. 先把用到的音频&…

Scratch(三十五):FlyBird

哈喽&#xff0c;大家好&#xff01;今天给大家展示的Scratch是FlyBird。接下来&#xff0c;我们一起看一下效果吧。 1、素材获取 2、bird的设置 当点击完小绿旗之后&#xff0c;bird就会有个上下浮动的控制&#xff0c;也就是变量“重力”的设置&#xff0c;接着就是开始位置…

Html5在线小游戏 在线玩压扁小鸟(flyBird)游戏源码

这个源码无需后台上传服务器&#xff0c;直接在线即可使用。 该游戏源码是基于HTML5和JavaScript开发的&#xff0c;运行在浏览器中&#xff0c;使得用户能够方便地进行游戏&#xff0c;而且不需要进行任何安装和下载操作。想要玩游戏的用户只需要访问指定链接即可开始游戏&am…

cocos游戏FlyBird

cocos creator游戏开发FlyBird 菜单界面Menu 首先建立一个场景&#xff08;scence&#xff09; 将你的背景图片添加入canvas并调整canvas的大小来适应你背景图片的大小&#xff0c;最好不要去图片大小&#xff0c;这样会使你的图片变得很丑 添加一个按钮控件 并给这个场景添…

java fly bird小游戏_JavaScript实现Fly Bird小游戏

3.1 小鸟 首先&#xff0c;创建小鸟的对象&#xff0c; bird.js 文件。 div:document.createElement("div"),showBird:function(parentObj) { this.div.style.width "40px"; this.div.style.height "28px"; this.div.style.backgroundImage &…

FLY BIRD

这是作品需要的角色…… 注:水管要多弄几个造型例如: (作者用的背景是blue sky(scratch素材库里面的)) 一下是水管的程序: 小鸟的也很简单:

Java之编写FlyBird小游戏

Java小游戏编写&#xff08;飞翔的小鸟&#x1f426;&#xff09; 概述&#xff1a;主要使用面向对象&#xff0c;线程&#xff0c;继承、ImageIO流等完成的一个小游戏 主要文件&#xff1a; &#x1f405;&#x1f389;&#x1f405;&#x1f389;&#x1f405;&#x1f389;…

介绍一款2023年新出的mysql管理工具: FlyBird Database Manager

FlyBird Database Manager 介绍 FlyBird Database Manager 是一款mysql 界面化管理工具&#xff0c; 使用go语言编写&#xff0c;天然支持Windows, MacOS, Linux等主流平台。 提供无需安装的命令行版本&#xff0c; 命令行中启动服务&#xff0c;以html支持UI界面,在浏览器中…

网络打印机无法连接的解决方法

&#xfeff;&#xfeff; 网络 打印机无法连接的解决方法。 1、首先确定计算机是否可以连接网络打印机&#xff0c;网络打印机都会有一个内网ip地址&#xff0c;可以先ping一下看通不通&#xff0c;如果不通说明计算机与网络打印机之间线路不通&#xff0c;可以用排除法看看是…

win10 系统连接不到网络打印机

查看其它同事的网上邻居里可以看到内容&#xff0c;但 本机空空如也&#xff01; 解决方法&#xff1a;打开控制面板&#xff1a;如下图所示&#xff1a;1&#xff1a;“程序“”->2&#xff1a;“启用或关闭windows功能“->3&#xff1a;勾选"SMB 1.0/CIFS文件共享…

windows10突然连不上打印机问题

问题描述 windows10打印机突然连接不上了&#xff0c;出现了错误&#xff1a; Active Directory 域服务当前不可用。 解决方案 在cmd中输入 services.msc 找到 发现这个服务没有运行&#xff0c;点击运行按钮&#xff0c;出现错误信息&#xff1a; win10错误0x800706b9…

共享网络打印机连接,以及解决无法连接打印机的问题

win10共享网络打印机&#xff0c;及连接打印机 1.共享2.连接补充一点 1.共享 打开WIN的远程连接。&#xff08;一方面是为了能方便使用远程桌面&#xff0c;这个以后会写到&#xff09;——我的电脑—右键—属性—远程设置。把两个都选上。然后搜索栏输入‘打印机’&#xff0…

解决:Win11无法连接网络打印机

&#xff08;一&#xff09;打开本地组策略。 1.1 按winR键盘组合键打开“运行”。在运行框中输入 “gpedit.msc”&#xff0c;回车键。 1.2 “开始”菜单中搜索&#xff1a;组策略&#xff0c;然后出现【编辑组策略】&#xff0c;点击进入。 &#xff08;二&#xff09;管理模…

关于Windows11无法连接打印机

刚买的W11电脑&#xff0c;发现办公室的共享打印机连接不了&#xff0c;显示无法连接。也看了很多解决办法&#xff0c;都没能解决。 然后发现了可能是W11家庭版的问题&#xff0c;微软系统更新后&#xff0c;就是会存在打印机连接不上的问题。这个网址就可以解决以上的问题。…