C++游戏开发中使用json

转载 2011年01月24日 09:40:00

最近想写一个自定义的动画数据文件,按照原来的做法,先定义一个文本格式的数据文件,然后写一个转换器转换成二进制,然后游戏中读入并解析。不过我 最近特别懒,虽然我已经设计了一个“万能的”文本格式和二进制转换工具,但是解析二进制文件的工作仍然繁琐,并且根据以往的经验,可能会经常的修改文件格 式,于是我想直接使用文本格式吧,首先想到的是XML,不过最近实在太懒了,连XML都懒得去解析,嗯,还有google Protocol Buffers这东西,以前看过,不过似乎用的人不多啊,还有一个json,见人在游戏中用过,那么就试试他吧。。

 找了几个c++的json解析器,最后选中了jsoncpp (http://jsoncpp.sourceforge.net )。首先jsoncpp是public domain的,那么就随便我怎么用了,太爽了,然后他使用的是标准c++,没有任何其他依赖(某些库还要依赖boost等东西),最后他很小巧,只有 15个源文件,我直接把这些文件copy到工程里就编译了,省去了lib的配置编译连接设定等等(既然懒就懒到底了。。。),直接看文档,用法非常简单, 我写了一个简单的json文件作为测试(其实是用jsoncpp的styled writer写的。。)

  1. {  
  2.    "float test"  : 1.0,  
  3.    "interger test"  : 1,  
  4.    "obj"  : {  
  5.       "a"  :  "obja" ,  
  6.       "b"  :  "objb" ,  
  7.       "c"  : 0.130  
  8.    },  
  9.    "str test"  :  "hello json!"   
  10. }  

测试代码:

  1. #include "json/json.h"   
  2. #include <fstream>   
  3. void  testJson()  
  4. {  
  5.     std::ifstream infile("test.json" );  
  6.     Json::Value root;  
  7.     Json::Reader reader;  
  8.     bool  ok = reader.parse(infile,root);  //直接传入一个ifstream就可以了,全部解析到root中,当然文件可别太大。。对我来说这种DOM的方式是很适合的   
  9.     if (!ok)  
  10.     {  
  11.         return ;  
  12.     }  
  13.     std::string name = root.get("str test" , "" ).asString();  //测试读入属性值   
  14.     std::cout<<name<<std::endl;  
  15.     //测试写入属性值,可直接生成新的键值对,以及对象,其实我之前的test.json是个空的,都是在这儿写入的   
  16.     root["interger test" ] = 1;  
  17.     root["float test" ] = 1.0f;  
  18.     root["obj" ][ "a" ] =  "obja" ;  
  19.     root["obj" ][ "b" ] =  "objb" ;  
  20.     root["obj" ][ "c" ] = 0.13;  
  21.     Json::StyledWriter writer;  
  22.     std::string output = writer.write(root);  
  23.     std::cout<<output;  
  24.     //直接写入文件,搞定   
  25.     std::ofstream file("test.json" );  
  26.     file<<output;  
  27. }  

使用jsoncpp简直太轻松了,我一句解析代码都没有写,直接从文件得到了json对象,有了json对象你就可以向你的游戏数据对象写入值了,或者作为早期的测试,直接使用json对象也未尝不可

c++游戏开发中使用json

 最近想写一个自定义的动画数据文件,按照原来的做法,先定义一个文本格式的数据文件,然后写一个转换器转换成二进制,然后游戏中读入并解析。不过我最近特别懒,虽然我已经设计了一个“万能的”文本格式和二进制转...
  • n5
  • n5
  • 2009年11月29日 22:46
  • 6606

C++中使用Json的方法

使用 C++ 处理 JSON 数据交换格式   一、摘要     JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的...
  • nyist327
  • nyist327
  • 2014年10月04日 18:54
  • 1526

C++各大有名库的介绍——游戏开发

在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到...
  • guomei
  • guomei
  • 2011年07月26日 02:34
  • 962

C++中使用Json

1. Json简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。Json的格式更加简单,同样的内容,用...
  • u012262484
  • u012262484
  • 2014年04月14日 11:32
  • 4291

JSON 在C++中的使用

CppCMS的编译和使用请参考我的相关文章。将C++对象转换成JSON字符串假定有一个类response,两个字段,一个是status,0代表正确。其他代表错误。另一个是message字段,表示操作结...
  • sheismylife
  • sheismylife
  • 2011年12月22日 17:47
  • 13909

c++ json安装和使用方法

JSON是一种轻量级的数据交换格式,了解json请参考其官网http://json.org/,本文介绍c++ JSON的安装和使用方法。 1、安装 下载jsonk...
  • zsl65326
  • zsl65326
  • 2014年06月04日 11:45
  • 1154

为什么游戏引擎大多选择使用 C++ 而不是&nbsp;C 开发?

作者:crazybie链接:https://www.zhihu.com/question/26591038/answer/89407866来源:知乎著作权归作者所有,转载请联系作者获得授权。在育碧干这...
  • u012798391
  • u012798391
  • 2016年10月20日 20:59
  • 653

C++ Json解析 之 JsonCpp的详细运用细节

在开发C++ 服务器的时候。常常需要 解析 Json文件。然后,就使用了jsoncpp,没毛病。 他是比较出名的 C++ JSON 解析库。在 JSON官网也是首推的。 但在使用的过程中,也碰到各种...
  • KiTok
  • KiTok
  • 2017年12月05日 15:10
  • 621

完美世界2017c++游戏开发:笔试题+面试题

现场笔试题
  • zzIymt
  • zzIymt
  • 2016年09月13日 11:28
  • 9882

Json介绍以及C++实现

Json格式解析以及c++读写
  • xiaojie1220computer
  • xiaojie1220computer
  • 2016年11月16日 00:21
  • 248
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++游戏开发中使用json
举报原因:
原因补充:

(最多只允许输入30个字)