• Jsoncpp试用指南


    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。在官方主页(中文)上有个简单的介绍(图比较形象),

    jsoncpp是一个c++封装的json包,跨平台支持windows、linux、unix等多系统。官方提供的编译需要使用到scons(一个基于python语言编写的编译工具,类似于autoconfig等工具),0.5版本的需要python2.6的支持——坑爹啊。

    反正有源码包,就自己改了个Makefile,编译生成了静态链接库libjsoncpp.a和动态链接库libjsoncpp.so。

    关于json的教程,在sf主页http://jsoncpp.sourceforge.net/有详细的文档。

    试用测试代码

    View Code
    #include <json/json.h>
    #include
    <iostream>
    int main()
    {
    Json::Value root;
    Json::Value arrayObj;
    Json::Value item;
    for (int i=0; i<10; i++)
    {
    item[
    "key"] = i;
    arrayObj.append(item);
    }

    root[
    "key1"] = "value1";
    root[
    "key2"] = "value2";
    root[
    "array"] = arrayObj;
    root.toStyledString();
    std::
    string out = root.toStyledString();
    std::cout
    << out << std::endl;
    }

    该段代码输出的并没有涉及到json文件的解析。只是以json的格式显示出来。

    简单的中文介绍参照博客 http://blog.csdn.net/vagrxie/archive/2010/07/22/5754179.aspx

    下面演示如下读写(官方上也有介绍的哦)。代码如下

    #include <json/json.h>
    #include
    <iostream>
    #include
    <fstream>
    using namespace std;
    int main()
    {
    Json::Value value;
    ifstream
    in("public.json");
    string str;
    string msg;
    if(in.is_open())
    {
    while(in>>str)
    msg
    += str;
    }
    Json::Reader reader;

    int ret = reader.parse(msg,value);

      if(ret)
    {
    string url = value["text"].asString();
    string date = value["created_at"].asString();
    cout
    <<value["privacy"].asInt()<<endl;
    cout
    <<url<<"\t"<<date<<endl;
    }
    in.close();
    return 0;
    }

    这段代码解析的digu的API返回的网页结果。可以正确输出。

    但是digu API  http://api.minicloud.com.cn/statuses/public_timeline.json返回的格式为无名数组。

    那么又该如何解析呢?

    参考代码如下

      reader.parse(apiret,value);
      
    for(int i = 0;i < value.size();++i)
      {
        
    string text = value[i]["text"].asString();
        cout
    <<text<<endl;
      }

    json对数组的解析还支持STL的风格。即

    Json::Value::Members member;//Members 这玩意就是vector<string>,typedef了而已
    for (Json::Value::iterator itr = objArray.begin(); itr != objArray.end(); itr++)
    {
    member
    = (*itr).getMemberNames();
    for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++)
    {
    string str_temp = (*itr)[(*iter)].asString();
    }
    }

    此种风格与上面的类似,只是上面的只是取"text"节点,而后一种是输出所有节点。

  • 相关阅读:
    MyEclipse 2015 Stable 2.0破解方法
    GeoGlobe Server运维
    GeoGlobe Server运维
    Silverlight用户无法注册之MySql.Data.dll不一致
    Photoshop影像匀色技术
    GeoGlobe Server使用问题收集
    Windows Server 2008 R2中无法使用360免费Wifi的解决方案
    吉奥平台软件安装经验分享
    U盘中毒后变为快捷方式的解决方法
    主机访问虚拟机中新建的网站
  • 原文地址:https://www.cnblogs.com/westfly/p/json_start.html
Copyright © 2020-2023  润新知