JSON(JavaScript Object Notation)
是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(網絡傳輸速度)
這裡我們主要使用jsoncpp
來解析json文件的
我們首先新建一個文件夾jsonCpp
,然後將jsoncpp克隆到我們的文件夾下面:
>mkdir jsonCpp && cd jsonCpp
>git clone https://github.com/open-source-parsers/jsoncpp.git
現在你的文件夾下面就會有一個jsoncpp文件夾,這裡面就是jsoncpp的源碼
面對這個多個文件和文件夾,是不是有點混亂了,但是我們用到的東西就只有兩個文件夾,一個是src/lib_json
文件夾,一個是include/json
文件夾
於是新建一個目錄,並將這兩個文件夾復制出來,將json
文件夾復制到lib_json
裡面
下載我們就需要編譯這些文件,並生成靜態鏈接庫,其實不編譯也行,只是後面用起來方便一點,我們來編輯一個Makefile
TARGET=libjson.lib
SRCS=json_writer.cpp\
json_reader.cpp\
json_value.cpp
OBJS=$(SRCS:.cpp=.o)
INCS=-I json
$(TARGET):$(OBJS)
ar rv $@ $^
%.o:%.cpp
g++ -c $< $(INCS) -o $@
make 以後發現報錯了
顯示錯誤為:
報錯找不到頭文件
博主琢磨了一番,發現還是找不到解決方案(對makefile不太熟悉,有大神指點一下麼?),只有改源文件了了,於是將json_value.cpp
,json_reader.cpp
,json_write.cpp
這三個文件裡面的頭文件的尖括號改為雙引號,然後make編譯成功。
我們得到了jsonCpp的靜態鏈接庫libjson.lib,接下面我們開始用jsoncpp解析json文件了
從上面的編譯可知,jsoncpp裡面大致包含三個類:
include
#include
#include "json/json.h"
#include
using namespace std;
int main()
{
ifstream inFile("test.json", ios::in);
if(!inFile.is_open())
{
cerr<<"Open the file failed"<
test.json
裡面的數據為:
{
"name":"qeesung",
"age":21
}
我們編譯一下:
g++ main.cpp libjson.lib -o myJson
運行結果為:
讀取含有數組的JSON文件
#include
#include
#include "json/json.h"
#include
using namespace std;
int main()
{
ifstream inFile("test.json", ios::in);
if(!inFile.is_open())
{
cerr<<"Open the file failed"<
json文件為:
[
{"name":"qeesung1","age":21},
{"name":"qeesung2","age":22},
{"name":"qeesung3","age":23},
{"name":"qeesung4","age":24}
]
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMiBpZD0="寫入數據到son文件中">編譯運行結果為:
寫入數據到SON文件中
#include
#include
#include "json/json.h"
#include
using namespace std;
int main()
{
ofstream outFile("test.json", ios::out | ios::trunc);
if(!outFile.is_open())
{
cerr<<"Open the file failed"<
我們得到結果:
[{"age":10,"root":"qeesung"},{"age":11,"root":"qeesung"},{"age":12,"root":"qeesung"}]