什么是 JSON文件

6,627次阅读
没有评论

共计 2568 个字符,预计需要花费 7 分钟才能阅读完成。

        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 
#include 
#include 

int main() {
    // 打开并读取 JSON 文件
    FILE *fp = fopen("user_info.json", "r");
    if (!fp) {fprintf(stderr, "Failed to open filen");
        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 failedn");
        return 1;
    }
    fread(buffer, 1, fileSize, fp);
    fclose(fp);
    buffer[fileSize] = '';
    
    // 解析 JSON
    cJSON *root = cJSON_Parse(buffer);
    if (!root) {free(buffer);
        fprintf(stderr, "Error before: %sn", 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: %sn", name);
    printf("Age: %dn", age);
    printf("Employee: %sn", is_employee ? "Yes" : "No");
    printf("Address: %s, %sn", street, city);
    
    for (int i = 0; i valuestring;
        printf("Phone %d: %sn", 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 接口的输入输出结构,有助于开发者理解如何构造请求和解析响应。

原文地址: 什么是 JSON 文件

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-29发表,共计2568字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)