将key更改为其他值
change key to another value
这是rapidjson的hello世界。我怎么能改变关键"hello"
到"goodbye"
,并从json获得字符串?我的意思是我想解析json,改变一些键,得到json字符串像{"goodbye" : "world"}
。
const char json[] = "{ "hello" : "world" }";
rapidjson::Document d;
d.Parse<0>(json);
const char *json = R"({"hello": "world"})";
rapidjson::Document d;
d.Parse<0> (json);
rapidjson::Value::Member* hello = d.FindMember ("hello"); if (hello) {
d.AddMember ("goodbye", hello->value, d.GetAllocator());
d.RemoveMember ("hello");
}
typedef rapidjson::GenericStringBuffer<rapidjson::UTF8<>, rapidjson::MemoryPoolAllocator<>> StringBuffer;
StringBuffer buf (&d.GetAllocator());
rapidjson::Writer<StringBuffer> writer (buf, &d.GetAllocator());
d.Accept (writer);
json = buf.GetString();
注:您可能应该在之后复制json
,因为它的内存将与d
一起释放。
P.P.S.您也可以就地替换字段名,而不删除它:
rapidjson::Value::Member* hello = d.FindMember ("hello");
if (hello) hello->name.SetString ("goodbye", d.GetAllocator());
或者在迭代期间:
for (auto it = d.MemberBegin(); it != d.MemberEnd(); ++it)
if (strcmp (it->name.GetString(), "hello") == 0) it->name.SetString ("goodbye", d.GetAllocator());
在我的例子中,有一个名为keyDict
的键字典,它存储了对象键应该替换为的值。
std::string line;
std::map<std::string, int> keyDict;
.....................
.........................
rapidjson::Document doc;
doc.Parse<0>(line.c_str());
rapidjson::Value::MemberIterator itr;
for (itr = doc.MemberonBegin(); itr != doc.MemberonEnd(); ++itr)
{
std::string keyCode = std::to_string(keyDict[itr->name.GetString()]);
itr->name.SetString(keyCode.c_str(), keyCode.size(), doc.GetAllocator());
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 保留对其他类的成员函数的引用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 具有包含其他对象的类的对象创建顺序
- 将key更改为其他值