C++ Jsoncpp开源库 json串的构造、访问和修改

最近开发关于Json串操作的相关代码,对json串的访问比较熟了,但是对节点的value值进行修改却没怎么弄过,经过自己尝试后成功搞定,以下是关键代码:

Json::Value jsonListObj;;
Json::Value jsonObj;
Json::Value jsonArray;
Json::Value Obj;
Obj["TollgateID"] = Json::Value("123");

// 构造json对象
jsonArray.append(Obj);
jsonObj["NonMotorVehicleObject"] = jsonArray;
jsonListObj["NonMotorVehicleListObject"] = jsonObj;

// 由json对象生成str串
std::string jsonData = jsonListObj.toStyledString();

printf("before jsonData[%s]\n", jsonData.c_str());

// 解析str串
Json::Reader reader;
Json::Value jsonValue;
if (!reader.parse(jsonData.c_str(),jsonValue))
{
    return;
}

// 遍历访问该json对象
Json::Value& listObject = jsonValue["NonMotorVehicleListObject"];
if (listObject.isObject())
{
    Json::Value& objectArray = listObject["NonMotorVehicleObject"];
    if (objectArray.isArray())
    {
	for (size_t i = 0; i < objectArray.size(); i++)
	{
	    Json::Value& object = objectArray[i];
	    object["TollgateID"] = "321";
	}
    }
}

printf("after jsonData[%s]\n", jsonValue.toStyledString().c_str());

以上代码是构造了一个json串,以及遍历访问节点,并且修改其值。需要注意的一点是:在访问各个节点的时候,在获取某节点对象时,我使用的是引用,只有这样才能真正将我们的修改生效。如果仅仅只是访问的话,您可以不使用引用。

你可能感兴趣的:(C++,jsoncpp)