✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
1.json
JSON(JavaScript Object Notation) 是一种轻量级的文本数据交换格式,易于让人阅读。同时也易于机器解析和生成。尽管 JSON 是 Javascript 的一个子集,但 JSON 是独立于语言的文本格式,并且采用了类似于 C 语言家族的一些习惯。JSON 解析器和 JSON 库支持许多不同的编程语言。几乎所有与网页开发相关的语言都有 JSON 库。JSON 比 XML 更小、更快。
🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀🎀
2.json datatype
JSON用于描述数据结构,有以下形式存在:
- 对象(object):一个对象以”{“开始,并以”}”结束。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用”,”分隔。
- 名称/值(collection):名称和值之间使用”:”隔开。一个名称是一个字符串;一个值 (value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。
JSON语法规则:(1)、数据在键值对中;(2)、数据由逗号分隔;(3)、花括号保存对象;(4)、方括号保存数组。
JSON的值可以是:
-
数值:一系列0-9的数字组合,可以为负数或者小数。还可以用”e”或者”E”表示为指数形式。数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
-
字符串:以""括起来的一串字符。字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。
-
布尔值:表示为true或者false。
-
数组(Array):数组是值(value)的有序集合。一个数组以”[“(左中括号)开始,”]”(右中括号)结束。值之间使用”,”(逗号)分隔。数组索引从0开始。
-
对象(object):对象是一个无序的”名称/值”对集合。一个对象以”{“开始,并以”}”结束。每个”名称”后跟一个”:”(冒号)。”名称/值”对之间使用”,”(逗号)分隔。
-
null
Json 开源库浩如烟海,不胜枚举,这里主要介绍 json11,git 地址:https://github.com/dropbox/json11,使用异常简单,只需 include json11.hpp 即可。
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
3.json example
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <json11.hpp>
using nameapce json11;
int main() {
Json my_json = Json::object{
{“key1”, “value1”},
{“key2”, “value2”},
{“key3”, Json::array {1, 2, 3}},
};
std::string = json_str = my_json.dump();
std::cout <<"json_str is : "<< json_str << std::endl;
std::cout <<"key1 : "<< my_jsonj[“key1”].string_value() << std::endl;
}
# CMake 编译
cmake_minimum_required(VERSION 3.18 FARAL_ERROR)
project(example_json VERSION 1.0.0.0 LANGUAGES C CXX)
include (${CMAKE_CURRENT_LIST_DIR}/external/json11/check.cmake) #external 包含了个人构建若干个三方库的 cmake 文件,组织了下载、编译、安装的全过程。一般来讲,不像我这样设置的话,会在 install 在/usr/local/目录下,只需要 find_package 即可
add_executable(json_test
${CMAKE_CURRENT_LIST_DIR}/unittest/json_read.cpp
)
target_link_libraries(json_test PRIVATE
json11::json11 #此处也是我重命名target,只要 link json11::json
)