JSON

C++的Json解析库:jsoncpp

字号+ 作者:H5之家 来源:H5之家 2016-01-26 09:22 我要评论( )

JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的json解析库的

 

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库,作者仅介绍自己使用过的两种C++的json解析库:jsoncpp(v0.5.0)和Boost(v1.34.0)。

1. 从字符串解析json一

Jsoncpp是个跨平台的开源库,首先从上下载jsoncpp库源码,我下载的是v0.5.0,压缩包大约107K,解压,在jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln,用VS2003及以上版本编译,默认生成静态链接库。 在工程中引用,只需要include/json及.lib文件即可。

使用JsonCpp前先来熟悉几个主要的类:

Json::Value     可以表示里所有的类型,比如int,string,object,array等,具体应用将会在后边示例中介绍。

Json::Reader   将json文件流或字符串解析到Json::Value, 主要函数有Parse。

Json::Writer    与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。

int ParseJsonFromString() 

  const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}"; 

  

  Json::Reader reader; 

  Json::Value root; 

  if (reader.parse(str, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素 

  { 

    std::string upload_id = root["uploadid"].asString();  // 访问节点,upload_id = "UP000000" 

    int code = root["code"].asInt();    // 访问节点,code = 100 

  } 

  return 0; 

2. 从文件解析json

json文件内容:

    "uploadid": "UP000000", 

    "code": "0", 

    "msg": "", 

    "files": 

    [ 

        { 

            "code": "0", 

            "msg": "", 

            "filename": "1D_16-35_1.jpg", 

            "filesize": "196690", 

            "width": "1024", 

            "height": "682", 

            "images": 

            [ 

                { 

                    "url": "fmn061/20111118", 

                    "type": "large", 

                    "width": "720", 

                    "height": "479" 

                }, 

                { 

                    "url": "fmn061/20111118", 

                    "type": "main", 

                    "width": "200", 

                    "height": "133" 

                } 

            ] 

        } 

    ] 

解析代码:

<span style="color:#333333;">int ParseJsonFromFile(const char* filename) 

  // 解析json用Json::Reader 

  Json::Reader reader; 

  // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array... 

  </span><span style="color:#ff0000;">Json::Value root;</span><span style="color:#333333;">        

  

  std::ifstream is; 

  is.open (filename, std::ios::binary );   

  if (reader.parse(is, root)) 

  { 

    std::string code; 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php CI 实战教程:[5]用curl获取json并解析

    php CI 实战教程:[5]用curl获取json并解析

    2016-02-26 17:00

  •  JSON入门级学习总结-JSON数据结构

    JSON入门级学习总结-JSON数据结构

    2016-02-25 11:05

  • Android解析Json速度最快的库:json

    Android解析Json速度最快的库:json

    2016-02-13 18:00

  • JavaScript转换与解析JSON方法实例详解第1/2页

    JavaScript转换与解析JSON方法实例详解第1/2页

    2016-02-10 21:25

网友点评
p