toml
rjson = { version: "0", package = "rj" }
```rust use rjson::RJson; fn main() { tracingsubscriber::fmt::init(); { let state = rjson::reactive(serdejson::json!({ "name": "John Doe", "age": 43, "phones": [ "+44 1234567", "+44 2345678" ], "address": { "province": "山东" } }));
let effect_state = state.clone();
let _eff = rjson::effect(move || {
effect_state.with_lock(|state| {
println!("-- hello effect, phones.1: {}", state.pget("phones.1"));
});
});
state.with_lock(|mut state| {
state.pset("name", "zhangsan".into());
state.pset("age", 18.into());
state.pset("age", 19.into());
/*
* æ— æ³•è¿½åŠ æ–°çš„å±žæ€§ï¼Œä¼šä½¿å†…å˜å¸ƒå±€é‡æŽ’,导致其他å˜é‡ptr地å€æ”¹å˜
* ç›®å‰è§£å†³æ–¹æ¡ˆï¼šé€šè¿‡JSON_ADDR_MAP记录旧地å€ï¼Œå½“下次访问地å€å˜åŒ–,更新为新地å€ï¼ˆä»¥å˜æ”¾åœ°å€çš„å˜é‡åœ°å€ä½œä¸ºtargetkey)
*/
state.pset("age2", serde_json::json!(null));
state.pset("phones.1", "0539".into());
println!(
"name: {}, age: {}, age2: {}",
state.pget("name"),
state.pget("age"),
state.pget("age2")
);
println!("phones: {:?}", state.pget("phones.0"));
println!("first phone {}", state["phones"][0]);
});
}
std::thread::park(); }
```