I have a some JSON data that is returned from a web service. The JSON is a top-level array:

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

使用serde_derive生成struct,我可以反序列化数组中包含的数据,但是,我无法让Serde反序列化顶级array.

我是否遗漏了什么,或者Serde不能反序列化顶级数组?

推荐答案

You can simply use a Vec:

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(())
}

If you wish, you could also use transparent:

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

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

这允许用您的类型封装数据.

Json相关问答推荐

如果主对象中已存在属性,则不应在Jolt中引用次对象

使用 Powershell,如何将 Azure AD 组成员转换为 Json 对象(文件),然后可以更新?

JOLT 转换仅过滤一个字段

golang递归json来构造?

如果值不存在,则将值插入 JSON 数组

shell解析json并循环输出组合变量

SwiftUI:如何使用 0 索引数组键为 JSON 添加类型

在 Perl Mojolicious 中呈现 JSON 时防止转义字符

SyntaxError:Object.parse(本机)AngularJS中的意外标记o

Spring MVC控制器中的JSON参数

在 Http Header 中使用 Json 字符串

字符串的 Gson 数组到 JsonArray

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

Java循环遍历Json数组?

如何判断 JSON 响应元素是否为数组?

你如何在 Arrays of Arrays 上 OPENJSON

如何将字符串转换为 JsonObject

不处理从这里抛出的错误

如何对事件对象进行字符串化?

HATEOAS中_embedded的含义和用法