Rust - как работать с serde_json::Value?
В Serde можно после парсинга json получить данные без укащания типа (serde_json::Value) и типизированные данные (через структуру). Получаю так:
let v: Value = serde_json::from_str(&response_body).unwrap();
let data = &v["arr"]["name"];
Если посмотреть на них, то увидим:
Array [String("name1"), String("name2")]
Если пытаться читать его в цикле, то выдается
&Value` is not an iterator
Как с этого типа получить все значения для дальнейшей работы с ними в цикле (в данном случае name1, name2)? Вроде их можно в MAP реэкспоритровать?
Ответы (1 шт):
Хотелось бы конечно знать, что автор хочет извлечь из json… Но например, serde_json::Value имеет набор методов as_bool, as_u64, as_f64, as_str, as_array, as_object. А также их _mut варианты, кроме того можно проверить вариант Value методами is_null, is_bool, is_number, is_string, is_array, is_object. Пример по просьбе из комментариев.
if let Some(names) = v["arr"]["name"].as_array() {
let names_as_str: Vec<&str> = names.iter()
.filter_map(|name| name.as_str())
.collect();
println!("Now names are a Vec of str slices {:?}", names_as_str);
}
можно если есть уверенность, что там точно array:
let names_as_str: Vec<&str> = v["arr"]["name"]
.as_array()
.unwrap()
.iter()
.filter_map(|name| name.as_str())
.collect();