}
PropertyProxy::PropertyProxy(json_t* object, const char* key)
- : _object(object) {
- _key = strdup(key);
+ : _object(object), _key(0) {
+ _iter = json_object_iter_at(object, key);
+ if(!_iter)
+ _key = strdup(key);
json_incref(_object);
}
PropertyProxy::PropertyProxy(const PropertyProxy& other)
- : _object(other._object) {
- _key = strdup(other._key);
+ : _object(other._object), _iter(other._iter), _key(0) {
+ if(other._key)
+ _key = strdup(other._key);
json_incref(_object);
}
// assign value to proxied object property
PropertyProxy& PropertyProxy::operator=(const Value& value) {
- json_object_set(_object, _key, value.as_json());
+ if(_iter)
+ json_object_iter_set(_object, _iter, value.as_json());
+ else
+ json_object_set(_object, _key, value.as_json());
return *this;
}
json_t* PropertyProxy::as_json() const {
- return json_object_get(_object, _key);
+ if(_iter)
+ return json_object_iter_value(_iter);
+ else
+ return json_object_get(_object, _key);
}
} // namespace json::detail