Json:下载、编译、示例、Jsoncpp,Windows/Linux

Windows下编译

一、下载Jsoncpp

      1.1 文件名

            jsoncpp-src-0.5.0.tar.gz

      1.2 Jsoncpp下载地址

            http://sourceforge.net/projects/jsoncpp/

二、编译Jsoncpp

      2.1 下载,解压

            下载jsoncpp-src-0.5.0.tar.gz,解压缩到D:\。

      2.2 编译

            进入目录D:\jsoncpp-src-0.5.0\makefiles\vs71,打开jsoncpp.sln,编译。

      2.3 生成结果

            在目录D:\jsoncpp-src-0.5.0\build\vs71\debug\lib_json下,生成文件json_vc71_libmtd.lib。

三、Jsoncpp示例代码

      3.1 配置编译环境

            1. 将json_vc71_libmtd.lib,拷贝到当前工程下。

            2. 将D:\jsoncpp-src-0.5.0\include\json目录,拷贝到当前工程下。

      3.2 代码

  1. #include <fstream>  
  2. #include <string>  
  3. #include "../json/json.h"  
  4. using namespace std;  
  5.   
  6. #pragma comment(lib,"json_vc71_libmtd.lib")  
  7.   
  8. void main()  
  9. {  
  10.     ifstream ifs;  
  11.     ifs.open("test.json", ios::out|ios::in);  
  12.     if(!ifs.is_open())  
  13.     {  
  14.         cout<<"fail to open file."<<endl;  
  15.         return;  
  16.     }  
  17.   
  18.     Json::Reader reader;  
  19.     Json::Value root;  
  20.     if(!reader.parse(ifs, root))  
  21.     {  
  22.         cout<<"fail to parse."<<endl;  
  23.         return;  
  24.     }  
  25.   
  26.     string s_name;  
  27.     int i_age;  
  28.     for(int i=0; i<root.size(); ++i)  
  29.     {  
  30.         s_name = root[i]["name"].asString();  
  31.         i_age = root[i]["age"].asInt();  
  32.   
  33.         cout<<"name:"<<s_name.c_str()<<", "<<"age:"<<i_age<<endl;  
  34.     }  
  35.   
  36.       
  37. }  
      3.3 json文件 与 生成结果

            1. json文件:[{"name":"kanguolai","age":25},{"name":"kanguoqu","age":18}]

            2. 生成结果:

            

四、错误处理

      4.1 编译Jsoncpp错误:

            1. 现象:C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: 命令“D:\Installed software for develop\jsoncpp-src-0.5.0\makefiles\vs71\../../build/vs71/debug/test_lib_json\test_lib_json.exe
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd”已退出,代码为 9009。

            2.解决办法:Jsoncpp放置的目录路径中,不能包含空格。

      4.2 编译测试代码错误

            1. 现象: error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) 已经在 msvcprtd.lib(MSVCP100D.dll) 中定义。

                 等一系列的错误提示。

            2. 解决办法:属性 -->  C/C++ -->  代码生成 -->  运行库 将其中的 “多线程调试DLL(/MDd)” 改为 “多线程调试(/MTd)” 。

                最根本解决办法:在编译Jsoncpp工程前,将其所有工程,由 “多线程调试(/MTd)” 改为 “多线程调试DLL(/MDd)” 。



参考资料: 

      资料:http://blog.csdn.net/nana08/article/details/6918877

      资料与示例:http://www.cnblogs.com/kex1n/archive/2011/12/02/2272328.html


Linux下编译

一、下载Jsoncpp、scons

      1.1 下载Jsoncpp

              文件名:jsoncpp-src-0.5.0.tar.gz

              下载地址:http://sourceforge.net/projects/jsoncpp/

      1.2 下载scons

              文件名:scons-2.3.0.tar.gz

              下载地址:http://www.scons.org/

二、编译Jsoncpp

      2.1 解压

            将jsoncpp-src-0.5.0.tar.gz、scons-2.3.0.tar.gz拷贝到目录/opt/jsoncpp下,解压缩:

            tar zxvf jsoncpp-src-0.5.0.tar.gz

            tar axvf scons-2.3.0.tar.gz 

     2.2 设置环境变量

            export MYSCONS=/opt/jsoncpp/scons-2.3.0
            export SCONS_LIB_DIR=$MYSCONS/engine

      2.3 编译

            python $MYSCONS/script/scons platform=linux-gcc

            或 python /opt/jsoncpp/scons-2.3.0/script/scons platform=linux-gcc

     2.4 生成结果

            在目录/opt/jsoncpp/jsoncpp-src-0.5.0/libs/linux-gcc-4.4.6下,生成:

                  libjson_linux-gcc-4.4.6_libmt.a  

                  libjson_linux-gcc-4.4.6_libmt.so

三、Jsoncpp示例代码

     3.1 代码

#include <fstream>
#include <string>
#include "json/json.h"
using namespace std;

#pragma comment(lib,"json_vc71_libmtd.lib")

int main()
{
	ifstream ifs;
	ifs.open("test.json", ios::out|ios::in);
	if(!ifs.is_open())
	{
		cout<<"fail to open file."<<endl;
		return -1;
	}

	Json::Reader reader;
	Json::Value root;
	if(!reader.parse(ifs, root))
	{
		cout<<"fail to parse."<<endl;
		return -1;
	}

	string s_name;
	int i_age;
	for(int i=0; i<root.size(); ++i)
	{
		s_name = root[i]["name"].asString();
		i_age = root[i]["age"].asInt();

		cout<<"name:"<<s_name.c_str()<<", "<<"age:"<<i_age<<endl;
	}


	return 0;
}

     3.2 Makefile文件

PROG := ./testjson

DEPS := .

COMPILE_OPTIONS := \
	-I . -I /opt/jsoncpp/jsoncpp-src-0.5.0/include -L /usr/lib64 -L /opt/jsoncpp/jsoncpp-src-0.5.0/libs/linux-gcc-4.4.6 \
	-g 

LINK_OPTIONS := \
	-lstdc++ \
	-lrt \
	-lpthread \
	/opt/jsoncpp/jsoncpp-src-0.5.0/libs/linux-gcc-4.4.6/libjson_linux-gcc-4.4.6_libmt.a

SOURCE  := $(shell find $(DEPS) -name "*.cpp") $(shell find $(DEPS) -name "*.c")
OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))

CC			:= g++
CFLAGS		:= $(COMPILE_OPTIONS)
CPPFLAGS	:= $(CFLAGS)


$(PROG):	$(OBJS)
	$(CC) $(CPPFLAGS) $(LDFLAGS) $(OBJS) $(LINK_OPTIONS) -o $@

.PHONY:clean
clean:
	-rm -rf $(PROG) $(OBJS) *~

     3.3 json文件 与 生成结果

            1. json文件:[{"name":"kanguolai","age":25},{"name":"kanguoqu","age":18}]

            2. 生成结果:

            


参考资料:http://www.linuxidc.com/Linux/2011-06/37315.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值