我有一个复杂的JSON文件,我想只提取其中的一个值。我可以定义所有的struct
,并在所有的Deserialize
上派生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的等价物是什么?
3条答案
按热度按时间bq9c1y661#
serde_json
为serde_json::Value
提供了通用JSON值的类型:(full playground example)
y1aodyip2#
如果你可以在值丢失或格式错误的情况下返回
Value::Null
,我会使用Index
语法([...]
)。如果你想以不同的方式处理丢失/格式错误的情况,请使用get
方法:您也可以通过
pointer
使用JSON Pointer:4zcjmb1e3#
我会把扁平的建筑