程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++解析JSON(jsonCpp)

C++解析JSON(jsonCpp)

編輯:C++入門知識

C++解析JSON(jsonCpp)


C++解析JSON(jsonCpp)

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,然後將jsoncpp克隆到我們的文件夾下面:

>mkdir jsonCpp && cd jsonCpp
>git clone https://github.com/open-source-parsers/jsoncpp.git

現在你的文件夾下面就會有一個jsoncpp文件夾,這裡面就是jsoncpp的源碼
Alt text

編譯jsoncpp

面對這個多個文件和文件夾,是不是有點混亂了,但是我們用到的東西就只有兩個文件夾,一個是src/lib_json文件夾,一個是include/json文件夾
Alt text

於是新建一個目錄,並將這兩個文件夾復制出來,將json文件夾復制到lib_json裡面
Alt text

下載我們就需要編譯這些文件,並生成靜態鏈接庫,其實不編譯也行,只是後面用起來方便一點,我們來編輯一個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 以後發現報錯了

顯示錯誤為:
Alt text

報錯找不到頭文件
博主琢磨了一番,發現還是找不到解決方案(對makefile不太熟悉,有大神指點一下麼?),只有改源文件了了,於是將json_value.cppjson_reader.cpp,json_write.cpp這三個文件裡面的頭文件的尖括號改為雙引號,然後make編譯成功。
Alt text

讀取JSON文件

我們得到了jsonCpp的靜態鏈接庫libjson.lib,接下面我們開始用jsoncpp解析json文件了
從上面的編譯可知,jsoncpp裡面大致包含三個類:

Json::Value 用來保存讀取的數據或者將要寫入文件的數據 Json::Reader 用來讀取JSON文件裡面的數據,並傳入到Json::Value對象裡面去 Json::FastWriter 用來將Json::Value對象寫入到一個JSON文件中去

讀取簡單的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"<

test.json裡面的數據為:

{
    "name":"qeesung",
    "age":21
}

我們編譯一下:g++ main.cpp libjson.lib -o myJson
運行結果為:
Alt text

讀取含有數組的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}
]

編譯運行結果為:
Alt text
<喎?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"}]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved