请教 rust 使用 serd 解析 JSON 的问题 - V2EX
codezilla

请教 rust 使用 serd 解析 JSON 的问题

  •  
  •   codezilla Jul 28, 2023 1449 views
    This topic created in 1035 days ago, the information mentioned may be changed or developed.

    初学 rust 的新手,在不将 JSON 字符串解析到结构体的情况下,如何方便的读取 JSON 对象的 A.B.C 的值? 目前我的实现方式:

    let data: Value = serde_json::from_str(response.as_str())?; let records = data .get("A") .ok_or_else(|| io::Error::new(ErrorKind::Other, "missing field: A"))? .get("B") .ok_or_else(|| io::Error::new(ErrorKind::Other, "missing field: B"))? .get("C") .ok_or_else(|| io::Error::new(ErrorKind::Other, "missing field: C"))? 

    请问大家有没有方法可以省略掉这些 ok_or_else()调用?

    3 replies    2023-07-28 13:55:10 +08:00
    sosilver
        1
    sosilver  
       Jul 28, 2023 via Android
    看文档,pointer 方法
    codezilla
        2
    codezilla  
    OP
       Jul 28, 2023
    @sosilver 感谢。看到了
    About     Help     Advertise     Blog     API     FAQ     Solana     1991 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:13 PVG 00:13 LAX 09:13 JFK 12:13
    Do have faith in what you're doing.
    ubaomsnsnddmindexpchomeyahoorakutenmypapermeadowduckbidyahooyoubaozxmzxmasdabnvcgcvbfgdfscvmmhjkxxddcyybgbzznbnccubaouaituacvGXCVETGDGYHFGBCVBFJFHCBRECBCGDGET54WRWRRWERWREWWRWERRWERSDGEWSFDSFSFfbbsubaofhddfgewrdgdfewwrewwretruyutututdfgfgdgdfgtetgdfgtdfgdert4gdfggwr235wer3wevsdfsdfgdfertxcvsdfrwerhfddfgcvbrwfafbdfhjghbmnlghrtygfdscxvxcvxcsvdasfdffgdcvsdftertsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfshasha9178shasha9178shasha9178shasha9178shasha9178liflif2liflif2liflif2liflif2liflif2liblib3liblib3liblib3liblib3liblib3zhazha444zhazha444zhazha444zhazha444zhazha444dende5dendedendendenden2denden21fenfen9fenf619fen619fenfe9fe619sdfsdfsdfsdfsdfzhazh90zhazh0zhaa50zha90zh590zhozhozzhozhzhozhozhozho2lislislls95lili95lils5liss9sdf0ty987sdft876sdft9876sdf09876sd0t9876sdf0ty98sdf0976sdf0ty986sdf0ty96sdf0t76sdf0876df0ty98sf0t876sd0ty76sdy76sdf76sdf0t76sdf0ty9sdf0ty98sdf0ty987sdf0ty98sdf6676sdf876sd876sd876sdf6sdf6sdf9876sdf0tsdf06sdf0ty9776sdf0ty9776sdf0ty76sdf8876sdf0tsd6sdf06s688876sd688sdf86
    Jirajine
        3
    Jirajine  
       Jul 28, 2023
    get 方法是安全 API ,你要是确定不会有空值,直接 data["A"]["B"]["C"]就完事,有 None 就 panic 。
    除非非常动态,不然反序列化成具体类型是更安全和方便的做法,配合 rust 的 enum 类型。