gpt4 book ai didi

rust - 如何在不派生结构的情况下使用 serde_json 获取 JSON 文件中的一个特定项目?

转载 作者:行者123 更新时间:2023-11-29 07:58:30 29 4
gpt4 key购买 nike

我有一个复杂的 JSON 文件,我只想从中提取一个值。我可以定义所有的 struct 并在所有这些上派生 Deserialize,但我只想编写一些手动代码来提取那个值。 Serde documentation ,坦率地说,这让我很困惑。

我的 JSON 内容具有以下布局:

{
"data": [
{
"hostname": "a hostname"
}
]
}

我正在寻找导航到的值,方法是进入 data,然后获取数组的第一个元素,然后获取 hostname 的值。

在 Haskell 中,我会这样做:

newtype Host = Host Text

instance FromJSON Host where
parseJSON (Object o) = (return . Host) <=< (.: "hostname") <=< (fmap (!! 0) . parseJSON) <=< (.: "data") $ o
parseJSON _ = mzero

Serde 的等价物是什么?

最佳答案

serde_json 为带有 serde_json::Value 的通用 JSON 值提供类型:

use serde_json::Value;

// input variable
let input: &str = "{...}";

// parse into generic JSON value
let root: Value = serde_json::from_str(input)?;

// access element using .get()
let hostname: Option<&str> = root.get("data")
.and_then(|value| value.get(0))
.and_then(|value| value.get("hostname"))
.and_then(|value| value.as_str());

// hostname is Some(string_value) if .data[0].hostname is a string,
// and None if it was not found
println!("hostname = {:?}", hostname); // = Some("a hostname")

( full playground example )

关于rust - 如何在不派生结构的情况下使用 serde_json 获取 JSON 文件中的一个特定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56279350/

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