January 2026

Deserialize a JSON Object with IDs in Rust with Serde

A quick look at parsing JSON data in Rust when things come in using arbitrary keys (e.g. for IDS)

---
[dependencies]
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
---

#![allow(warnings)]
use serde::Deserialize;
use std::collections::HashMap;

#[derive(Debug, Deserialize)]
struct Data {
  items: HashMap<String, Item>
}

#[derive(Debug, Deserialize)]
struct Item {
  x: u8,
  y: u8 
}


fn main() {
  let input = r#"
  {
    "items": {
      "alfa": {
        "x": 1, "y": 1
      },
      "bravo": {
        "x": 2, "y": 2
      }
    }
  }
  "#;

  let data: Data = serde_json::from_str(input).unwrap();
  dbg!(data);
}
Output:
[_active_nvim_run:38:3] data = Data {
    items: {
        "bravo": Item {
            x: 2,
            y: 2,
        },
        "alfa": Item {
            x: 1,
            y: 1,
        },
    },
}
end of line