ToB企服应用市场:ToB评测及商务社交产业平台

标题: 什么是 JSON文件 [打印本页]

作者: 民工心事    时间: 2024-9-4 21:29
标题: 什么是 JSON文件
        JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它独立于语言,易于人阅读和编写,同时也易于机器解析和天生。JSON基于JavaScript的对象字面量语法,但是它作为一种数据格式,并不仅限于JavaScript中使用,许多编程语言都支持JSON的解析和天生。
一、JSON的基本结构

JSON主要由两种结构构成:
1.1 对象

        在大括号{}内,包罗零个或多个键值对(key-value pairs)。每个键值对由一个字符串键和一个值组成,键和值之间使用冒号:分隔,差别的键值对之间用逗号,分隔。
  1. {
  2.   "name": "Alice",
  3.   "age": 30,
  4.   "city": "New York"
  5. }
复制代码
1.2 数组

        在方括号[]内,包罗有序的值列表,值之间用逗号,分隔。数组中的值可以是任何正当的JSON数据类型,包括对象、数组或其他基本类型。
  1. [
  2.   "apple",
  3.   "banana",
  4.   "cherry"
  5. ]
复制代码
1.3 JSON支持的数据类型

 JSON支持的数据类型包括:

二、案例说明

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

  1. git clone https://github.com/DaveGamble/cJSON.git
  2. cd cJSON
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make
  7. sudo make install
复制代码
2.2  JSON文件 user_info.json

  1. {
  2.     "name": "John Doe",
  3.     "age": 30,
  4.     "is_employee": true,
  5.     "address": {
  6.         "street": "123 Main St",
  7.         "city": "Anytown"
  8.     },
  9.     "phone_numbers": [
  10.         "+1234567890",
  11.         "+0987654321"
  12.     ]
  13. }
复制代码
2.3  C语言程序来读取并解析JSON文件

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <cjson/cJSON.h>
  4. int main() {
  5.     // 打开并读取JSON文件
  6.     FILE *fp = fopen("user_info.json", "r");
  7.     if (!fp) {
  8.         fprintf(stderr, "Failed to open file\n");
  9.         return 1;
  10.     }
  11.    
  12.     // 读取文件内容到缓冲区
  13.     fseek(fp, 0, SEEK_END);
  14.     long fileSize = ftell(fp);
  15.     fseek(fp, 0, SEEK_SET);
  16.     char *buffer = (char*)malloc(fileSize + 1);
  17.     if (!buffer) {
  18.         fclose(fp);
  19.         fprintf(stderr, "Memory allocation failed\n");
  20.         return 1;
  21.     }
  22.     fread(buffer, 1, fileSize, fp);
  23.     fclose(fp);
  24.     buffer[fileSize] = '\0';
  25.    
  26.     // 解析JSON
  27.     cJSON *root = cJSON_Parse(buffer);
  28.     if (!root) {
  29.         free(buffer);
  30.         fprintf(stderr, "Error before: %s\n", cJSON_GetErrorPtr());
  31.         return 1;
  32.     }
  33.    
  34.     // 提取并打印信息
  35.     const char *name = cJSON_GetObjectItem(root, "name")->valuestring;
  36.     int age = cJSON_GetObjectItem(root, "age")->valueint;
  37.     int is_employee = cJSON_IsTrue(cJSON_GetObjectItem(root, "is_employee"));
  38.    
  39.     cJSON *address = cJSON_GetObjectItem(root, "address");
  40.     const char *street = cJSON_GetObjectItem(address, "street")->valuestring;
  41.     const char *city = cJSON_GetObjectItem(address, "city")->valuestring;
  42.    
  43.     cJSON *phone_numbers = cJSON_GetObjectItem(root, "phone_numbers");
  44.     int phone_count = cJSON_GetArraySize(phone_numbers);
  45.    
  46.     printf("Name: %s\n", name);
  47.     printf("Age: %d\n", age);
  48.     printf("Employee: %s\n", is_employee ? "Yes" : "No");
  49.     printf("Address: %s, %s\n", street, city);
  50.    
  51.     for (int i = 0; i < phone_count; i++) {
  52.         const char *number = cJSON_GetArrayItem(phone_numbers, i)->valuestring;
  53.         printf("Phone %d: %s\n", i+1, number);
  54.     }
  55.    
  56.     // 清理
  57.     cJSON_Delete(root);
  58.     free(buffer);
  59.    
  60.     return 0;
  61. }
复制代码
         这个程序起首打开并读取JSON文件的内容,然后使用 cJSON_Parse 函数将其解析成一个JSON对象。之后,通过一系列的 cJSON_GetObjectItem 和 cJSON_IsTrue 调用来提取和验证JSON数据的差别部分,末了打印出来。请留意,运行此程序前确保已经正确安装并配置了 cJSON  库。
三、JSON的用途


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4