gpt4 book ai didi

rust - 使用 serde_json 将 JSON 对象转换为 HashMap

转载 作者:行者123 更新时间:2023-12-05 01:05:46 29 4
gpt4 key购买 nike

我正在尝试使用 serde_json 将 JSON 对象解析为 Rust 中的 HashMap。使用以下代码,我得到了错误:

error[E0507]: cannot move out of index of `Value`

如何将 Value 放入我的 HashMap?

use serde_json::{Result, Value};
use std::collections::HashMap;

fn main() {

let variables_json = r#"{
"awayTeamAbbrev": "DAL",
"homeTeamAbbrev": "TB",
"gameInstanceUid": "cbs-nfl-pickem-challenge",
"sportType": "NFL",
"weekNumber": 1
}"#;
let keys = vec!["sportType","weekNumber"];
dbg!(json_to_hashmap(&variables_json, keys));

}

fn json_to_hashmap(json: &str, keys: Vec<&str>) -> Result<HashMap<String, Value>> {
let lookup: Value = serde_json::from_str(json).unwrap();
let mut map = HashMap::new();
for key in keys {
let varname = key.to_owned();
let value = lookup[&varname];
map.insert(varname, value);
}
Ok(map)

}

最佳答案

您可以获得 HashMap<String, Value>直接来自 serde_json::from_str ,然后使用 remove_entry在不克隆的情况下取出值:

fn json_to_hashmap(json: &str, keys: Vec<&str>) -> Result<HashMap<String, Value>> {
let mut lookup: HashMap<String, Value> = serde_json::from_str(json).unwrap();
let mut map = HashMap::new();
for key in keys {
let (k, v) = lookup.remove_entry (key).unwrap();
map.insert(k, v);
}
Ok(map)
}

Playground

关于rust - 使用 serde_json 将 JSON 对象转换为 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70342603/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com