JSON
JavaScript Object Notation --> JSON。是轻量级的数据交换格式,使用 Javascript语法来描述数据对象。
json对象:{}表示的无序KV结构,用逗号分割,用于结构化的数据(如结构体等)。
json数组:[]表示的有序集合
安装jsoncpp库
需要下载jsoncpp的库
sudo yum install jsoncpp-devel -y
安装好库以后,库的路径为 /lib64/libjsoncpp*
,头文件的路径是 /usr/include/jsoncpp/
[yyq@VM-8-13-centos 2023_04_22_Calculator_TCPSocket]$ ls /lib64/libjsoncpp* -al
lrwxrwxrwx 1 root root 15 Apr 23 18:42 /lib64/libjsoncpp.so -> libjsoncpp.so.0
lrwxrwxrwx 1 root root 20 Apr 23 18:42 /lib64/libjsoncpp.so.0 -> libjsoncpp.so.0.10.5
-rwxr-xr-x 1 root root 227656 Apr 24 2016 /lib64/libjsoncpp.so.0.10.5
[yyq@VM-8-13-centos 2023_04_22_Calculator_TCPSocket]$ ls /usr/include/jsoncpp/json -al
total 88
drwxr-xr-x 2 root root 4096 Apr 23 18:42 .
drwxr-xr-x 3 root root 4096 Apr 23 18:42 ..
-rw-r--r-- 1 root root 2203 Jul 23 2015 assertions.h
-rw-r--r-- 1 root root 662 Jul 23 2015 autolink.h
-rw-r--r-- 1 root root 3860 Jul 23 2015 config.h
-rw-r--r-- 1 root root 1509 Jul 23 2015 features.h
-rw-r--r-- 1 root root 758 Jul 23 2015 forwards.h
-rw-r--r-- 1 root root 420 Jul 23 2015 json.h
-rw-r--r-- 1 root root 11482 Jul 23 2015 reader.h
-rw-r--r-- 1 root root 26101 Jul 23 2015 value.h
-rw-r--r-- 1 root root 509 Jul 23 2015 version.h
-rw-r--r-- 1 root root 10298 Jul 23 2015 writer.h
在编译的时候要指明jsoncpp的路径,makefile文件要加上编译选项 -ljsoncpp
通过ldd查看可执行文件的链接
[yyq@VM-8-13-centos 2023_04_22_Calculator_TCPSocket]$ ldd Calserver
linux-vdso.so.1 => (0x00007ffedadce000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fae9c761000)
libjsoncpp.so.0 => /lib64/libjsoncpp.so.0 (0x00007fae9c52a000)
libstdc++.so.6 => /home/yyq/.VimForCpp/vim/bundle/YCM.so/el7.x86_64/libstdc++.so.6 (0x00007fae9c1a9000)
libm.so.6 => /lib64/libm.so.6 (0x00007fae9bea7000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fae9bc91000)
libc.so.6 => /lib64/libc.so.6 (0x00007fae9b8c3000)
/lib64/ld-linux-x86-64.so.2 (0x00007fae9c97d000)
使用方法
1、包对应的头文件 #include <jsoncpp/json/json.h>
2、makefile文件要加上编译选项 -ljsoncpp
Json::Value root;//Value是个万能对象
序列化可以用两个对象 StyledWriter
和 FastWriter
,它们内部成员方法都叫做 write
。转换出来的序列格式不同,FastWriter序列化得到的字符串更精简,没有多余的回车换行。
用例测试
#include <iostream>
#include <jsoncpp/json/json.h>
int main()
{
int a = 10;
int b = 20;
char c = '+';
// 封装格式化数据
Json::Value root;
root["num1"] = a;
root["num2"] = b;
root["op"] = c;
// 序列化
Json::StyledWriter Writer_style;
std::string s_style = Writer_style.write(root);
std::cout << "StyledWriter:\n" << s_style << std::endl;
Json::FastWriter Writer_fast;
std::string s_fast = Writer_fast.write(root);
std::cout << "FastWriter:\n" << s_fast << std::endl;
return 0;
}
输出为
[yyq@VM-8-13-centos 2023_04_24_jSON]$ ./testjson
StyledWriter:
{
"num1" : 10,
"num2" : 20,
"op" : 43
}
FastWriter:
{"num1":10,"num2":20,"op":43}
序列化
Json::FastWriter
/ Json::StyledWriter
中的 write
方法
反序列化
Json::Reader
中的 parse
方法