Reputation: 45
I would like to use serde_json
to parse a .json
file into a IndexMap
. However it says the Deserialize
trait has not been implemented for IndexMap
. Is there a way to use serde_json
with IndexMap
?
let elements: IndexMap<String, Value> = serde_json::from_str(r#"
{
"Hydrogen (H) ": 1,
"Helium (He)": 4,
"Lithium (Li)": 7,
"Beryllium (Be)": 9,
"Boron (B) ": 11,
"Carbon (C) ": 12,
"Nitrogen (N) ": 14,
"Oxygen (O) ": 16,
"Flourine (F) ": 19,
"Neon (Ne)": 20
}
"#).expect("err: unable to parse json");
Upvotes: 3
Views: 1674
Reputation: 2114
To deserialize index map you need either feature flag serde
or serde-1
.
main.rs
use indexmap::IndexMap;
use serde_json::Value;
fn main() {
let elements: IndexMap<String, Value> = serde_json::from_str(r#"
{
"Hydrogen (H) ": 1,
"Helium (He)": 4,
"Lithium (Li)": 7,
"Beryllium (Be)": 9,
"Boron (B) ": 11,
"Carbon (C) ": 12,
"Nitrogen (N) ": 14,
"Oxygen (O) ": 16,
"Flourine (F) ": 19,
"Neon (Ne)": 20
}
"#).expect("err: unable to parse json");
eprintln!("{:?}", elements);
}
Cargo.toml
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
indexmap = {version = "1.9.1", features = ["serde-1"]}
Upvotes: 10