我正在使用 jsoncpp 来操作 JSON 字符串。将字符串解析为 Json::Value 后,我想访问并可能更改其中一个嵌套对象(如果存在)。如果嵌套对象不存在,我不希望它被创建。
查看json 文档,似乎返回对对象的引用的唯一方法是通过 operator[]。
Value& operator[] (const char *key)
按名称访问对象值,如果不存在则创建一个空成员。
const Value& operator[] (const char *key) const
按名称访问对象值,如果没有具有该名称的成员,则返回 null。
我需要结合这两种语义的东西:我想要一个可变引用,但如果它不存在则不涉及创建对象。(我理解为什么 Json::Value 接口是这样设计的:返回一个可变引用会暴露其内部的空对象。)
我能看到的唯一干净的方法是使用 Json::Value::isMember 来确定对象是否存在,然后使用 Value& operator[] 来访问该对象。但这涉及两个 O( log N ) 查找而不是一个,我可能想避免这种情况。
没有丑陋的 const_cast,有什么明智的方法可以做我想做的事吗?