当前位置:   article > 正文

JSON文件格式_json文件写法

json文件写法
前言:

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"
					}
			   ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

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

[
	{
		"id" : 1 ,
		"name" : "ming"
	},
	{
		"id" : 2 , 
		"name" : "hong"
	}
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

在这里插入图片描述

//解析自己写的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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

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

参考博客:请点击查阅!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/595961
推荐阅读
相关标签
  

闽ICP备14008679号