Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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");
like image 863
absolute failure Avatar asked Aug 30 '25 16:08

absolute failure


1 Answers

To deserialize index map you need the feature flag serde.

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 = "2.9.0", features = ["serde"] }
like image 152
AlexN Avatar answered Sep 03 '25 08:09

AlexN