c++生成json文件,c++对象转json
一.摘要
JSON的全称是Javascript Object Notation。顾名思义,JSON用于标记JavaScript对象。JSON的官方解释是:JSON是一种轻量级的数据传输格式。
本文不详细介绍JSON本身的细节,旨在讨论如何使用C语言处理JSON。更多关于JSON的具体信息,请参考JSON官网:http://www.json.org。
其次,本文选择C库来处理JSON。
本文选择第三方库jsoncpp来解析JSON。CPP是一个著名的C jsoncpp解析库。JSON也是官网第一。
下载地址:http://sourceforge.net/projects/jsoncpp.本文使用的jsoncpp版本是:0.5.0。
三。Windows下jsoncpp的编译
要使用第三方源代码库,第一步就是编译,把源代码文件编译成我们方便的动态链接库、静态链接库或者静态导入库[1]。
Jsconcpp的JSON解析源文件分布在include/json,src/lib_json下。其实jsoncpp源代码并不多。为了方便产品管理,这里不需要编译成动态链接库或者静态导入库,所以我们选择使用静态链接库[2]。
Jsoncpp已经处理得很完美了,所有编译选项都已经配置好了。可以通过打开makefiles/vs71/jsoncpp.sln开始编译(默认使用VS2003编译器,打开时可以直接按照VS2005提示进行操作)。
四。jsoncpp使用的详细说明
Jsoncpp主要包含三种类型的类:Value、Reader和Writer。CPP中的所有对象和类都在名称空间Json中命名,包括json.h
Json:Value只能处理ANSI类型的字符串。如果C程序是用Unicode编码的,最好添加一个Adapt类来适应。
1、价值
Json:Value是jsoncpp中最基本也是最重要的类,用来表示各种类型的对象。jsoncpp支持的对象类型可以在Json:ValueType枚举值中找到。
可以按如下方式使用Json:Value类:
JSON:Value JSON _ temp;//临时对象,由下面的代码使用
json_temp[name]=Json:Value(胡超);
Json _ temp[ age ]=Json:Value(26);
JSON:Value root;//表示整个json对象
root[ key _ string ]=Json:Value( Value _ string );//创建一个新的键(名为:key_string)并分配字符串值:“value_string”。
root[ key _ number ]=Json:Value(12345);//创建一个新的密钥(名为:key_number)并赋予其值12345。
root[ key _ boolean ]=Json:Value(false);//创建一个新的Key(名为:key_boolean)并赋予bool一个值:false。
root[ key _ double ]=Json:Value(12.345);//创建一个新的Key(名为:key_double)并赋予double值:12.345。
root[ key _ object ]=Json _ temp;//创建一个新的Key(名为:key_object)并赋予json:Value对象一个值。
根[key_array]。append( array _ string );//创建一个数组类型的新键(名为:key_array),并将第一个元素赋值为字符串:“array_string”。
根[key_array]。追加(1234);//给数组key_array赋值,第二个元素是:1234。
JSON:value type type=root . type();//获取根的类型,这里是objectValue的类型。
注意:与C不同,JavaScript array可以是任何类型的值,所以jsoncpp也可以使用。
以上用法已经可以满足大部分json应用。当然,jsoncpp还有一些其他的特性,比如设置注释、比较json大小、交换json对象等。这些都很容易使用。请你自己试试。
2、作家
说了Json:Value的用法,是时候检查一下刚刚赋值的内容了。只需检查json内容并使用Writer类。
CPP的Json:Writer类是纯虚拟类,不能直接使用。这里我们使用Json:Writer的子类:Json:FastWriter,Json:StyledWriter,Json:StyledStreamWriter。
顾名思义,用Json:FastWriter处理Json应该是最快的。让我们试一试。
JSON:fast writer fast _ writer;
STD:cout fast _ writer . write(root)STD:endl;
输出是:
{key_array:[array_string ,1234], key_boolean:false, key_double:12.3450, key_number:12345, key_object:{age:26, name :胡超 }, key_string:value_string}
再次顾名思义,使用Json:StyledWriter就是格式化Json。我们来看看Json:StyledWriter是如何格式化的。
JSON:styled writer styled _ writer;
STD:cout styled _ writer . write(root)STD:endl;
输出是:
{
key_array : [ array_string ,1234 ],
key_boolean : false,
key_double : 12.3450,
key_number : 12345,
key_object :
年龄:26岁,
姓名:胡超
},
键字符串:值字符串
}
3、读者
Json:Reader用于阅读。确切地说,它是用来将字符串转换成Json:Value对象的。让我们看一个简单的例子。
JSON:Reader Reader;
Json:值json _ object
const char * JSON _ document= {/ age/:26,/name/ : /胡超/ } ;
如果(!reader.parse(json_document,json_object))
返回0;
STD:cout JSON _ object[ name ]STD:endl;
STD:cout JSON _ object[ age ]STD:endl;
输出是:
胡超的
26
可以看到上面的代码已经解析出了json字符串。
-
[1]:使用第三方源代码最简单的方法是直接在项目中添加文件,但这不利于源代码和软件产品的管理,一般软件开发不建议使用。
[2]:如果真的需要编译成动态链接库或者静态导入库,可以用VS新建一个项目属性,然后在项目-属性中设置。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。