Linux下Json库的编译及代码测试
一、Json基礎(chǔ)
???JSON(JavascriptObject Notation)是一種輕量級(jí)的數(shù)據(jù)交換語(yǔ)言,以文字為基礎(chǔ),且易于讓人閱讀。盡管JSON是在Javascript的一個(gè)子集,但JSON是獨(dú)立于語(yǔ)言的文本格式,并且采用了類(lèi)似于C語(yǔ)言家族的一些習(xí)慣。JSON建構(gòu)有兩種結(jié)構(gòu):
1) “名稱(chēng)/值”對(duì)的集合(A collection of name/value pairs)。不同的語(yǔ)言中,它被理解為對(duì)象(object),記錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組 (associative array)。
? ? ? ?2)值的有序列表(An ordered list of values)。在大部分語(yǔ)言中,它被理解為數(shù)組(array)。
? ? 例如,現(xiàn)創(chuàng)建一個(gè)新的 JavaScript 變量,然后將 JSON格式的數(shù)據(jù)字符串直接賦值給它:
? ? varpeople = {
? ??? ??"programmers":[
? ??? ??? ??{"firstName": "Brett", "lastName":"McLaughlin","email": "aaaa" },
? ??? ??? ??{"firstName": "Jason","lastName":"Hunter", "email": "bbbb" },
? ??? ??? ??{"firstName": "Elliotte","lastName":"Harold", "email": "cccc" }
? ??? ??? ??],
? ??? ??"authors":[
? ??? ??? ??{"firstName": "Isaac", "lastName":"Asimov", "genre": "science fiction" },
? ??? ??? ??{"firstName": "Tad", "lastName":"Williams", "genre": "fantasy" },
? ??? ??? ??{"firstName": "Frank", "lastName":"Peretti", "genre": "christian fiction" }
? ??? ??? ??],
? ??? ??"musicians":[
? ??? ??? ??{"firstName": "Eric", "lastName":"Clapton", "instrument": "guitar" },
? ??? ??? ??{"firstName": "Sergei", "lastName":"Rachmaninoff", "instrument": "piano" }
? ??? ??]}
? ??這非常簡(jiǎn)單;現(xiàn)在 people包含前面看到的 JSON 格式的數(shù)據(jù)。
?
二、編譯Json庫(kù)
? ??jsoncpp是一個(gè)c++封裝的json包,跨平臺(tái)支持windows、linux、unix等多系統(tǒng)。在windows 下面使用比較簡(jiǎn)單,直接往vc里面添加項(xiàng)目就可以了。linux下面編譯需要使用到scons,scons是python工具,需要先安裝好python。
1.下載源碼包并解壓scons-2.2.0.tar.gz
? ??[root@localhost nfs]#tarxzf scons-2.2.0.tar.gz
? ??[root@localhostnfs]#cd scons-2.2.0
? ??[root@localhostscons-2.2.0]# ls
? ??? ??CHANGES.txt? MANIFEST??????????? README.txt?? sconsign.1???setup.cfg
? ??? ??engine??????os_spawnv_fix.diff? RELEASE.txt?scons-time.1? setup.py
? ??? ??LICENSE.txt? PKG-INFO??????????? scons.1????? script
2.設(shè)置環(huán)境變量(為scons-2.2.0的目錄)
? ??[root@localhost jsoncpp-src-0.5.0]#export MYSCONS=/work/nfs/scons-2.2.0
? ??[root@localhost jsoncpp-src-0.5.0]#export SCONS_LIB_DIR=$MYSCONS/engine
3.下載源碼包并解壓jsoncpp-src-0.5.0.tar.gz
? ??[root@localhost nfs]# tar xzfjsoncpp-src-0.5.0.tar.gz
? ??[root@localhostnfs]# cd jsoncpp-src-0.5.0
? ??[root@localhostjsoncpp-src-0.5.0]#ls
? ??? ??AUTHORS?? doxybuild.py?makefiles?????? scons-tools ?test
? ??? ??devtools? include??????makerelease.py? SConstruct?? version
? ??? ??doc?????? LICENSE?????? README.txt????? src
4.編譯
? ??[root@localhostjsoncpp-src-0.5.0]#python$MYSCONS/script/scons platform=linux-gcc
? ??[root@localhostjsoncpp-src-0.5.0]# ls include/json/???
? ??? ??autolink.h? features.h?json.h???value.h???????//頭文件
? ??? ??config.h??? forwards.h?reader.h? writer.h
? ??[root@localhostjsoncpp-src-0.5.0]#ls libs/linux-gcc-4.1.2/
? ??? ??libjson_linux-gcc-4.1.2_libmt.a? libjson_linux-gcc-4.1.2_libmt.so??//庫(kù)
?
三、測(cè)試
1.編寫(xiě)json_test.cpp
?
#include<iostream>??
#include<string>????
#include"./json/json.h"??
using namespace std;?
?
int main(void)?
{?
?????? stringstrJson ="{\"key1\":\"value1\",\"array\":[{\"key2\":\"value2\",\"key3\":\"aa\"},{\"key2\":\"value3\",\"key3\":\"bb\"},{\"key2\":\"value4\",\"key3\":\"cc\"}]}";
?????? Json::Readerreader;
?????? Json::StyledWriterstyled_writer;
?????? Json::Valueval;
?????? if(!reader.parse(strJson,val))
????????????? return-1;
?????????????
?????? stringstr = val["key1"].asString();
?????? cout<< "key1:" << str << endl;
??????
?????? Json::Valueobj_array = val["array"];
?????? cout<< styled_writer.write(obj_array) << endl;
??????
?????? for(int i = 0; i < obj_array.size(); i++)
?????? {
????????????? str= obj_array[i]["key2"].asString();
????????????? cout<< "key2[" << i << "]:" << str<< endl;
?????????????
????????????? str= obj_array[i]["key3"].asString();
????????????? cout<< "key2[" << i << "]:" << str<< endl;
?????? }
?
?????? ?return 0;?
}??
?
2.創(chuàng)建符號(hào)鏈接
?? ?[root@localhost jsoncpp-src-0.5.0]#ln -s/work/nfs/jsoncpp-src-0.5.0/libs/linux-gcc-4.1.2/libjson_linux-gcc-4.1.2_libmt.so? /usr/local/lib/libjson.so
? ??[root@localhost jsoncpp-src-0.5.0]#/sbin/ldconfig ? //更新庫(kù)
3.編譯
???[root@localhost jsoncpp-src-0.5.0]#g++ json_test.cpp ?-ljson
4.運(yùn)行程序
? ??[root@localhostjsoncpp-src-0.5.0]#./a.out
?
? ??? ??key1:value1
? ??? ??? ??[
? ??? ??? ????{
?? ??? ??? ??????"key2" : "value2",
? ??? ??? ???????"key3" : "aa"
?? ??? ??? ???},
?? ??? ??? ???{
?? ??? ??? ??????"key2" : "value3",
? ??? ??? ???????"key3" : "bb"
? ??? ??? ????},
? ??? ??? ????{
? ??? ??? ???????"key2" : "value4",
? ??? ??? ???????"key3" : "cc"
? ??? ??? ????}
? ??? ??]
?
? ??key2[0]:value2
? ??key2[0]:aa
? ??key2[1]:value3
? ??key2[1]:bb
? ??key2[2]:value4
? ??key2[2]:cc
?
轉(zhuǎn)載于:https://www.cnblogs.com/xinyuyuanm/archive/2013/03/25/2980399.html
總結(jié)
以上是生活随笔為你收集整理的Linux下Json库的编译及代码测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 系统要关闭,可我程序还有事要处理?
- 下一篇: dataGridView1去掉第一列