C++ Jsoncpp 常用技巧

Json对象循环遍历

代码样式

int main() {
    Json::Value json_value = Json::Value(Json::objectValue);
    json_value["object_one"] = 1;
    json_value["object_two"] = 2;
    json_value["object_three"] = 3;
    json_value["object_a"] = 4;
    Json::Value::Members mem = json_value.getMemberNames();
    for (Json::Value::Members::iterator iter = mem.begin(); iter != mem.end(); ++iter) {
        cout << *iter << " : " << json_value[*iter];
    }
    return 0;
}

运行结果

object_a : 4
object_one : 1
object_three : 3
object_two : 2

总结:使用迭代器去遍历Json对象时,会按照key的值排序进行输出,而不是按照添加key_value的顺序输出;

Array数组循环遍历

代码样式

int main() {
    Json::Value json_value = Json::Value(Json::arrayValue);
    json_value.append(1);
    json_value.append(2);
    json_value.append(4);
    json_value.append(3);
    json_value.append(5);
    for (unsigned int i = 0;i<json_value.size();++i){
        cout << json_value[i].asInt();
        if(i != json_value.size()-1){
            cout << ",";
        }
    }
    cout << endl;
    cout << "+++++++++++++++++++++++++++++++" << endl;
    for (unsigned int i = 0;i<json_value.size();++i){
        cout << json_value[i];
        if(i != json_value.size()-1){
            cout << ",";
        }
    }
    cout << endl;
    return 0;
}

运行结果

1,2,4,3,5
+++++++++++++++++++++++++++++++
1
,2
,4
,3
,5

总结:遍历Json数组时一定要将元素通过asInt()、asString()转成你需要的数据类型,否之直接使用会出现意想不到的问题;

char*转Json

代码样式

int main() {
    char* json_str = "{\"object\":[1,2,3]}";
    cout << json_str << endl;
    cout << "===== change to json =====" << endl;
    Json::Value json_value;
    Json::Reader json_reader;
    json_reader.parse(json_str,json_value);
    cout << json_value << endl;
    return 0;
}

运行结果

{"object":[1,2,3]}
===== change to json =====

{
        "object" : [ 1, 2, 3 ]
}

Json转string

代码样式

int main() {
    Json::Value json_value;
    json_value["object"] = "json_test";
    cout << json_value << endl;
    cout << "===== change to char* =====" << endl;
    string json_str;
    Json::FastWriter jsonWriter;
    json_str = jsonWriter.write(json_value);
    cout << json_str << endl;
    return 0;
}

运行结果


{
        "object" : "json_test"
}

===== change to char* =====
{"object":"json_test"}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值