Skip to main content

10_json_roundtrip/
10_json_roundtrip.rs

1//! JSON serialisation and deserialisation round-trip.
2//!
3//! Run: cargo run --example 10_json_roundtrip
4//!
5//! Two accepted forms:
6//!   • canonical object  {"shape":[…],"data":[…]}  (preferred)
7//!   • convenience nested arrays  [[1,2],[3,4]]  (rank 1 and 2 only)
8
9use matten::Tensor;
10
11fn main() -> Result<(), Box<dyn std::error::Error>> {
12    // ── serde round-trip ────────────────────────────────────────────────
13    let original = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
14    let json = serde_json::to_string(&original)?;
15    println!("serialised: {json}");
16
17    let restored: Tensor = serde_json::from_str(&json)?;
18    assert_eq!(original, restored);
19    println!("round-trip: OK  shape={:?}", restored.shape());
20
21    // ── from_json: canonical object form ────────────────────────────────
22    let t = Tensor::from_json(r#"{"shape":[2,2],"data":[1.0,2.0,3.0,4.0]}"#)?;
23    println!("object form:  {t:?}");
24
25    // ── from_json: nested-array convenience form ─────────────────────────
26    let t2 = Tensor::from_json("[[1.0,2.0],[3.0,4.0]]")?;
27    println!("nested form:  {t2:?}");
28
29    // ── load_json from file ──────────────────────────────────────────────
30    let t3 = Tensor::load_json("examples/data/tensor_2x2.json")?;
31    println!("from file:    {t3:?}");
32
33    Ok(())
34}