首页 > 其他分享 >什么是 JSON文件

什么是 JSON文件

时间:2024-07-23 18:00:12浏览次数:11  
标签:fp 文件 cJSON 什么 phone JSON GetObjectItem root

        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它独立于语言,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript的对象字面量语法,但是它作为一种数据格式,并不仅限于JavaScript中使用,许多编程语言都支持JSON的解析和生成。

一、JSON的基本结构

JSON主要由两种结构构成:

1.1 对象

        在大括号{}内,包含零个或多个键值对(key-value pairs)。每个键值对由一个字符串键和一个值组成,键和值之间使用冒号:分隔,不同的键值对之间用逗号,分隔。

{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}

1.2 数组

        在方括号[]内,包含有序的值列表,值之间用逗号,分隔。数组中的值可以是任何合法的JSON数据类型,包括对象、数组或其他基本类型。

[
  "apple",
  "banana",
  "cherry"
]

1.3 JSON支持的数据类型

 JSON支持的数据类型包括:

  • 字符串(必须用双引号包围)
  • 数字(整数或浮点数)
  • 布尔值(true 或 false)
  • 对象(键值对的集合)
  • 数组(值的有序列表)
  • null

二、案例说明

2.1 安装 cJSON 库 (如果使用的是Linux系统)

git clone https://github.com/DaveGamble/cJSON.git
cd cJSON
mkdir build
cd build
cmake ..
make
sudo make install

2.2  JSON文件 user_info.json

{
    "name": "John Doe",
    "age": 30,
    "is_employee": true,
    "address": {
        "street": "123 Main St",
        "city": "Anytown"
    },
    "phone_numbers": [
        "+1234567890",
        "+0987654321"
    ]
}

2.3  C语言程序来读取并解析JSON文件

#include <stdio.h>
#include <stdlib.h>
#include <cjson/cJSON.h>

int main() {
    // 打开并读取JSON文件
    FILE *fp = fopen("user_info.json", "r");
    if (!fp) {
        fprintf(stderr, "Failed to open file\n");
        return 1;
    }
    
    // 读取文件内容到缓冲区
    fseek(fp, 0, SEEK_END);
    long fileSize = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    char *buffer = (char*)malloc(fileSize + 1);
    if (!buffer) {
        fclose(fp);
        fprintf(stderr, "Memory allocation failed\n");
        return 1;
    }
    fread(buffer, 1, fileSize, fp);
    fclose(fp);
    buffer[fileSize] = '\0';
    
    // 解析JSON
    cJSON *root = cJSON_Parse(buffer);
    if (!root) {
        free(buffer);
        fprintf(stderr, "Error before: %s\n", cJSON_GetErrorPtr());
        return 1;
    }
    
    // 提取并打印信息
    const char *name = cJSON_GetObjectItem(root, "name")->valuestring;
    int age = cJSON_GetObjectItem(root, "age")->valueint;
    int is_employee = cJSON_IsTrue(cJSON_GetObjectItem(root, "is_employee"));
    
    cJSON *address = cJSON_GetObjectItem(root, "address");
    const char *street = cJSON_GetObjectItem(address, "street")->valuestring;
    const char *city = cJSON_GetObjectItem(address, "city")->valuestring;
    
    cJSON *phone_numbers = cJSON_GetObjectItem(root, "phone_numbers");
    int phone_count = cJSON_GetArraySize(phone_numbers);
    
    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Employee: %s\n", is_employee ? "Yes" : "No");
    printf("Address: %s, %s\n", street, city);
    
    for (int i = 0; i < phone_count; i++) {
        const char *number = cJSON_GetArrayItem(phone_numbers, i)->valuestring;
        printf("Phone %d: %s\n", i+1, number);
    }
    
    // 清理
    cJSON_Delete(root);
    free(buffer);
    
    return 0;
}

         这个程序首先打开并读取JSON文件的内容,然后使用 cJSON_Parse 函数将其解析成一个JSON对象。之后,通过一系列的 cJSON_GetObjectItemcJSON_IsTrue 调用来提取和验证JSON数据的不同部分,最后打印出来。请注意,运行此程序前确保已经正确安装并配置了 cJSON 库。

三、JSON的用途

  1. 数据交换:由于其简洁和可读性,JSON成为Web服务中最常用的数据交换格式之一。无论是Ajax请求还是RESTful API,服务器和客户端之间传递数据时,经常使用JSON格式。

  2. 配置文件:很多应用程序和工具使用JSON格式来存储配置信息,因为它易于编辑且结构清晰。

  3. 数据存储:虽然不像XML或数据库那样是专门设计用于数据存储的格式,但简单的数据可以方便地以JSON格式保存在文件中,尤其是在不需要复杂查询功能的场景下。

  4. 命令行工具和脚本:一些命令行工具和脚本语言使用JSON来传递参数或输出结果,因为它的结构化特性使得处理起来非常方便。

  5. 文档说明:部分API文档会采用JSON Schema格式来描述API接口的输入输出结构,有助于开发者理解如何构造请求和解析响应。

标签:fp,文件,cJSON,什么,phone,JSON,GetObjectItem,root
From: https://blog.csdn.net/m0_52980547/article/details/140641789

相关文章

  • Win11系统显示缺少mfc140.dll文件怎么解决?Win11计算机找不到mfc140.dll修复方法
    在Win11计算机中,如果出现找不到mfc140.dll的情况,您无需过度担忧。这里为您提供有效的修复方法。您可以通过重新安装相关软件、更新系统、手动下载并注册该文件等方式来解决问题,让您的计算机恢复正常运行。本篇将为大家带来Win11计算机找不到mfc140.dll修复方法的内容,感兴趣的小......
  • SQL2019收缩LDF的日志文件
    解决日志文件满造成SQL数据库无法写入文件问题1、打开MicrosoftSQLServerManagementStudio管理工具,右键你要压缩的数据库->任务->收缩->文件2、在“文件类型”选择“日志”,在“收缩操作”选择“在释放未使用的空间前重新组织页”,这里会给出一个允许收缩到的最小M数......
  • flask写接口,定制日志输出以及将请求状态以及自定义日志写入文件中
    前言:无论是写接口还是写项目,配置日志是必选的;适合配置可以帮助自己排查代码逻辑问题简单说一说日志的等级以及用处1.日志等级DEBUG:10INFO:20WARN:30ERROR。40CRITICAL:50数字越大,等级越高!!2.日志用处:        DEBUG(调试):用于开发阶段的调试,开启后,会记录程序......
  • C++学习笔记(01)——使用VS Code进行C++函数分文件编写
    首先需要下载安装:C/C++ProjectGenerator扩展,就是下图这玩意:下载安装完成后,按ctrl+shift+p打开命令面板,输入createC++project,按回车后可以选择保存工程的文件夹创建好会后生成几个目录:.vscode:里面放一些配置文件之类的,如launch.json、setting.json、tasks.jsoninclude:存......
  • 检测自身大数据风险在选择平台时要注意什么问题
    随着大数据技术在各个行业和领域的运用,在金融风险控制和评估的方面也有很大的作用,在申贷钱,用户检测自身的大数据信用风险是很有必要的,这样可以根据自身的大数据信用情况选择自己的容易通过的贷款,那检测自身大数据风险在选择平台时要注意什么问题呢?下面详细的为大家讲讲。......
  • Windows桌面突然出现desktop.ini文件怎么处理
    在Windows系统中,desktop.ini文件是一个系统可识别的文件,主要用于存储用户对文件夹的个性设置,如文件夹图标、背景颜色等。以下是对desktop.ini文件的详细解释:一、文件作用   存储个性设置:当用户更改文件夹的图标、背景颜色或设置其他属性时,这些配置信息会被存储在文件夹内......
  • Three.js针对.gltf类型建模文件封装记录
    记录Three.js代码组件封装片段,支持定制旋转位置大小配置three.js官方连接:Three.js中文网3D模型文件下载地址:3D模型可视化编辑器完整效果图片封装文件位置:utils文件夹下 依赖安装:"dependencies":{"three":"^0.165.0","three-obj-mtl-loader":"^1.......
  • 如何将 json 文件的文件名写入同一个 json 文件的键值对?
    我在每个图像的json文件中存储了注释,但这些文件没有图像的文件名作为其中的键,因此我想输入这些json文件的文件名作为其中的字段。eg:|||应包含文件名字段。Train1.jpeg.json我正在尝试使这些文件对coco格式有效。{"filename":"train1.jpeg""d......
  • c/c++ jsoncpp的基本使用
    一、概述jsoncpp官网作用:在c++中可以方便的组装及解析json格式的数据。二、代码示例voidMyJsonCpp::toJsonStr(){Json::ValuejsonValue;jsonValue["username"]="luoluoyang";jsonValue["password"]="123456";jsonValue["ag......
  • c 使用cJSON生成及解析json类型数据
    一、概述cJSON官网作用:可以在c程序中方便的进行json字符串的解析及生成 二、代码示例//组装一个json串voidCJsonTest::valueToJsonObject(){cJSON*root,*fmt;char*out;root=cJSON_CreateObject();//创建一个obj(申请了堆内存记得释放)......