jsoncpp,是一个c++的解析和生成json的开源工具。如果你的c++程序需要解析或生成json,它会使这个过程变得很简单!
但是,今天在用jsoncpp进行生成json的时候报了错误,很显然这不是我程序的问题。
Test.cpp: In function ‘std::string createJsonData()’: Test.cpp:41: error: conversion from ‘long long int’ to ‘const Json::Value’ is ambiguous include/json/value.h:205: note: candidates are: Json::Value::Value(bool) include/json/value.h:188: note: Json::Value::Value(const char*) <near match> include/json/value.h:187: note: Json::Value::Value(double) include/json/value.h:186: note: Json::Value::Value(Json::UInt) include/json/value.h:185: note: Json::Value::Value(Json::Int) include/json/value.h:184: note: Json::Value::Value(Json::ValueType) <near match>
当我的要生成json的数据中包含long类型时,出现了这个错误!如果将long改为int或double则可以通过编译。
根据错误信息,很显然,jsoncpp并没有实现插入数据中有long类新的接口。所以jsoncpp无法处理包含long类新的数据。
在网上搜了一下,有人解释为何jsoncpp不支持long数据的接口,“为什么JsonCpp里面为什么没有64位整数?Json起源于javascript,在js中数字的表示可能与高级语言中不一样, 如果一位数字32位表示不了那么js中应该一律都是用double表示, 所以说js中 大整数其实也是double, 这也就能解释为什么在jsoncpp中为什么没提供64为整数转化的方法。”
我尝试将long类型改为double类型,可以通过,不过生成的json串中,long-》double的数据会在数字后面多一个小数点。这并不是我想要的!
jsoncpp是个不错的工具,但不能处理long类型是它美中不足的地方。