jsoncpp转换类

来源:微信公众号「编程学习基地」

一个简单的jsoncpp转换类

qt下使用 jsoncpp 设计的 JsonParse 对象

class JsonParse
{
public:
    JsonParse(Json::Value J)
    :m_json(J)
    {};
    JsonParse(const void *V)
    :m_str(V ? (const char*)V : "")
    {};
    JsonParse(const char *S)
    :m_str(S ? S : "")
    {};
    JsonParse(const char *S, int L)
    :m_str(S ? S : "", S ? L : 0)
    {};
    JsonParse(std::string S)
    :m_str(S)
    {};
    virtual ~JsonParse(){};

public:
    std::string toString(const char* indent="")
    {
        if(m_json.isObject() && m_json.getMemberNames().size() == 0)
            return "";
        else if(m_json.isString())
            return m_json.asString();

        Json::StreamWriterBuilder builder;
        if(indent)
            builder["indentation"] = indent; //The JSON document is written in a single line if indent == ""
        return Json::writeString(builder, m_json);
    };
    const char* toCString(const char* indent="")
    {
        m_str = toString(indent);
        return m_str.c_str();
    };

    bool toJson(Json::Value &J)
    {
        bool ret = false;
        JSONCPP_STRING errs;
        Json::CharReaderBuilder builder;
        Json::CharReaderBuilder::strictMode(&builder.settings_);
        //builder["collectComments"] = false; // true = 允许在反序列化的时候保存注释,然后在序列化的时候写回注释
        Json::CharReader* reader = builder.newCharReader();
        ret = reader->parse(m_str.data(), m_str.data() + m_str.size(), &J, &errs);
        if(!ret || !errs.empty())
            qDebug()<<"error、"<<endl;
        if(reader){delete reader;reader = NULL;}
        return ret;
    }

    std::string formatMinSize()
    {
        /*
         * 仅支持构造入参为字符串的形式
         * 如果是Json::Value的构造形式,可以直接格式化成指定的indent
        */
        if(!m_str.empty())
            toJson(m_json);
        return toString();
    }

private:
    std::string m_str;
    Json::Value m_json;
};

简单使用

	QByteArray data = request.readBody();
	Json::Value urlResp;
	JsonParse(data.toStdString()).toJson(urlResp);
    qDebug()<<"string:" <<QString(urlResp["string"].asCString()) <<endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeRoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值