your programing

Serde를 사용하여 JSON을 최상위 어레이로 역직렬화하려면 어떻게 해야 합니까?

lovepro 2023. 4. 2. 12:39
반응형

Serde를 사용하여 JSON을 최상위 어레이로 역직렬화하려면 어떻게 해야 합니까?

웹 서비스에서 반환된 JSON 데이터가 있습니다.JSON은 최상위 어레이입니다.

[
    {
        "data": "value1"
    },
    {
        "data": "value2"
    },
    {
        "data": "value3"
    }
]

사용.serde_derive만들기 위해서structs 어레이에 포함된 데이터를 역직렬화할 수 있지만 Serde가 최상위 어레이를 역직렬화할 수 없습니다.

제가 뭘 놓쳤나요, 아니면 서드가 최고 레벨 어레이를 분리할 수 없나요?

는, 간단하게 사용할 수 있습니다.

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Debug)]
struct Foo {
    data: String,
}

fn main() -> Result<(), serde_json::Error> {
    let data = r#"[
        {
            "data": "value1"
        },
        {
            "data": "value2"
        },
        {
            "data": "value3"
        }
    ]"#;

    let datas: Vec<Foo> = serde_json::from_str(data)?;

    for data in datas.iter() {
        println!("{:#?}", data);
    }

    Ok(())
}

필요에 따라서, 투과 기능을 사용할 수도 있습니다.

#[derive(Serialize, Deserialize, Debug)]
#[serde(transparent)]
struct Foos {
    foos: Vec<Foo>,
}

let foos: Foos = serde_json::from_str(data)?;

이를 통해 데이터를 유형으로 캡슐화할 수 있습니다.

언급URL : https://stackoverflow.com/questions/44610594/how-can-i-deserialize-json-with-a-top-level-array-using-serde

반응형