Rust处理JSON

基本操作

Cargo.toml:

复制代码
[package]
name = "json"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["full"] }
warp = "0.3"

main.rs:

复制代码
use serde::{Deserialize, Serialize};


#[derive(Debug, Deserialize, Serialize)]
struct Person {
    name: String,
    age: i64,
}

fn main() {
    let json_str = r#"
            {
            "name": "dashen",
            "age": 18
            }
   "#;

    let person: Person = serde_json::from_str(json_str).unwrap();
    println!("{:?}", person)
}

输出为:

复制代码
Person { name: "dashen", age: 18 }

嵌套结构体

warp[1]

复制代码
use serde::{Deserialize, Serialize};
use warp::Filter;

#[derive(Debug, Deserialize, Serialize)]
struct Person {
    name: String,
    age: i64,
}


#[derive(Debug, Deserialize, Serialize)]
struct Demo {
    name: String,
    person: Person,
}

#[tokio::main]
async fn main() {
    let hello = warp::path!("json")
        .map(|| warp::reply::json(
            &Demo {
                name: "geek".to_string(),
                person: Person {
                    name: "dashen".to_string(),
                    age: 28,
                },
            }
        ));

    warp::serve(hello)
        .run(([127, 0, 0, 1], 3030)).await;
}

返回不同的结构(一般用枚举来解决)

复制代码
use serde::{Deserialize, Serialize};
use warp::Filter;

#[derive(Debug, Deserialize, Serialize)]
struct Person {
    name: String,
    age: i64,
}


#[derive(Debug, Deserialize, Serialize)]
struct Demo {
    name: String,
    person: Person,
    shape: Shape,
}


#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "lowercase", tag = "shape")] // 处理成小写,同时加一个tag区分啥形状
enum Shape {
    Circle {
        radius: f64,
    },

    Rectangle {
        length: f64,
        width: f64,
    },
}


#[tokio::main]
async fn main() {
    let hello = warp::path!("json")
        .map(|| warp::reply::json(
            &Demo {
                name: "geek".to_string(),
                person: Person {
                    name: "dashen".to_string(),
                    age: 28,
                },
                shape: Shape::Circle {
                    radius: 3.5
                },
            }
        ));

    warp::serve(hello)
        .run(([127, 0, 0, 1], 3030)).await;
}

参考资料

1

warp: https://github.com/seanmonstar/warp

本文由mdnice多平台发布

相关推荐
间彧1 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧1 小时前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧1 小时前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧1 小时前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧1 小时前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧1 小时前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧1 小时前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang2 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
草明2 小时前
Go 的 IO 多路复用
开发语言·后端·golang
蓝-萧3 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端