absolute failure
absolute failure

Reputation: 45

Using IndexMap with serde_json

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

Answers (1)

trust_nickol
trust_nickol

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

Related Questions