最近开发关于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串,以及遍历访问节点,并且修改其值。需要注意的一点是:在访问各个节点的时候,在获取某节点对象时,我使用的是引用,只有这样才能真正将我们的修改生效。如果仅仅只是访问的话,您可以不使用引用。