簡體   English   中英

Rust中JSON中的JsonNode

[英]JsonNode in JSON in Rust

我瀏覽了Rust的標准JSON庫http://doc.rust-lang.org/serialize/json/ ,但無法弄清楚其中代表了一個節點。 在Java中,它是JsonNode Rust到底是什么? 例如,如何在Rust中傳遞JsonNode類型的參數?

Rust的JSON的“ DOM”由Json枚舉定義。 例如,以下JSON對象:

{ "array": [1, 2, 3], "submap": { "bool": true, "string": "abcde" } }

由Rust中的此表達式表示:

macro_rules! tree_map {
    ($($k:expr -> $v:expr),*) => ({
        let mut r = ::std::collections::TreeMap::new();
        $(r.insert($k, $v);)*
        r
    })
}

let data = json::Object(tree_map! {
    "array".to_string() -> json::List(vec![json::U64(1), json::U64(2), json::U64(3)]),
    "submap".to_string() -> json::Object(tree_map! {
        "bool".to_string() -> json::Boolean(true),
        "string".to_string() -> json::String("abcde".to_string())
    })
});

在這里嘗試)

我使用了自定義地圖構造宏,因為不幸的是Rust標准庫沒有提供一個(但是,我希望如此)。

Json只是一個常規枚舉,因此您必須使用模式匹配從中提取值。 Object包含TreeMap的實例,因此您必須使用其方法檢查對象結構:

if let json::Object(ref m) = data {
    if let Some(value) = m.find_with(|k| "submap".cmp(k)) {
        println!("Found value at 'submap' key: {}", value);
    } else {
        println!("'submap' key does not exist");
    }
} else {
    println!("data is not an object")
}

更新

顯然, Json提供了許多便利的方法,包括find() ,如果目標是具有相應鍵的Object ,它將返回Option<&Json>

if let Some(value) = data.find("submap") {
    println!("Found value at 'submap' key: {}", value);
} else {
    println!("'submap' key does not exist or data is not an Object");
}

感謝@ChrisMorgan的發現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM