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(([127001], 3030)).await;
}
alt
alt

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


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(([127001], 3030)).await;
}

alt

参考资料

[1]

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

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/52053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端(十四)——DOM节点操作手册:你需要了解的一切

🙂博主:小猫娃来啦 🙂文章核心:DOM节点操作手册:你需要了解的一切 文章目录 前言DOM基础知识操作现有节点创建新节点遍历节点树修改节点属性和样式事件处理实践应用动态创建表格动态更新列表 前言 DOM(文档…

算法岗和开发岗有什么区别?

算法岗和开发岗有什么区别? ​ 算法岗位和开发岗位在实际应用中有很大的差异,而且其工作的内容重心也不一样。企业对职位能力的要求也是存在着很大的区别。 ​ 其实在真正的实践中,只有大厂才对这两个岗位分的比较清楚,小的公司…

计算机网络第3章(数据链路层)

计算机网络第3章(数据链路层) 3.1 数据链路层概述3.1.1 概述3.1.2 数据链路层使用的信道3.1.3 三个重要问题 3.2 封装成帧3.2.1 介绍3.2.2 透明传输3.2.3 总结 3.3 差错检测3.3.1 介绍3.3.2 奇偶校验3.3.3 循环冗余校验CRC(Cyclic Redundancy Check)3.3.…

【FAQ】安防监控视频汇聚平台EasyCVR接入GB国标设备,无法显示通道信息的排查方法

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【分析绘图】R语言实现一些常见的绘图

微生信-在线绘图网站 线性图 library(ggplot2)x <- rnorm(100, 14, 5) # rnorm(n, mean 0, sd 1) y <- x rnorm(100, 0, 1) ggplot(data NULL, aes(x x, y y)) # 开始绘图geom_point(color "darkred") # 添加点annotate("text",x 13,…

【从零学习python 】92.使用Python的requests库发送HTTP请求和处理响应

文章目录 URL参数传递方式一&#xff1a;使用字典传递参数URL参数传递方式二&#xff1a;直接在URL中拼接参数获取响应头信息获取响应体数据a. 获取二进制数据b. 获取字符数据c. 获取JSON数据 进阶案例 URL参数传递方式一&#xff1a;使用字典传递参数 url https://www.apiop…

idea使用tomcat

1. 建立javaweb项目 2. /WEB-INF/web.xml项目配置文件 如果javaweb项目 先建立项目&#xff0c;然后在项目上添加框架支持&#xff0c;选择javaee 3. 项目结构 4.执行测试&#xff1a;

系统稳定性与高可用保障

一、前言 高并发、高可用、高性能被称为互联网三高架构&#xff0c;这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三 H 中的高可用&#xff0c;也是我们常说的系统稳定性。 > 本篇文章只聊思路&#xff0c;没有太多的深入细节。阅读全…

新手如何快速学习C++!思路清晰好执行

C是一种广泛使用的编程语言&#xff0c;它被广泛应用于游戏开发、系统编程、嵌入式开发等领域。对于新手来说&#xff0c;快速掌握C技能是非常重要的。本文将为新手提供一些快速学习C的方法和技巧。 1.了解C的基本语法 学习C的第一步是了解其基本语法。C的语法非常严谨和规范…

Springboot实现ENC加密

Springboot实现ENC加密 1、导入依赖2、配置加密秘钥&#xff08;盐&#xff09;3、获取并配置密文4、重启项目测试5、自定义前缀、后缀6、自定义加密方式 1、导入依赖 关于版本&#xff0c;需要根据spring-boot版本&#xff0c;自行修改 <dependency><groupId>co…

Python可视化工具库实战

Matplotlib Matplotlib 是 Python 的可视化基础库&#xff0c;作图风格和 MATLAB 类似&#xff0c;所以称为 Matplotlib。一般学习 Python 数据可视化&#xff0c;都会从 Matplotlib 入手&#xff0c;然后再学习其他的 Python 可视化库。 Seaborn Seaborn 是一个基于 Matplo…

● 647. 回文子串 ● 516.最长回文子序列

647. 回文子串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>>dp(s.size(),vector<bool>(s.size(),false));int res0;for(int is.size()-1;i>0;i--){for(int ji;j<s.size();j){if(s[i]s[j]){if(j-i<1){res;dp[i][…

微服务 Nacos配置热部署

在nacos中添加配置文件 在配置列表中添加配置&#xff0c; 注意&#xff1a;项目的核心配置&#xff0c;需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 从微服务拉取配置 微服务要拉取nacos中管理的配置&#xff0c;并且与…

大厂考核重点:mysql索引面试题

很多同学面对Mysql索引相关的面试题都是死记硬背的&#xff0c;这肯定是不行的&#xff0c;也不容易记住&#xff0c;所以大家还是要循循渐进&#xff0c;从理解开始&#xff0c;慢慢掌握&#xff0c;当然对于想要准备面试题的同学&#xff0c;这几个问题是需要记住并理解的&am…

数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成

数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成 目录 数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成&#xff1b; 2.马尔科夫链蒙特卡洛方…

服务器数据恢复-ESXi虚拟化误删除的数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器安装的ESXi虚拟化系统&#xff0c;该虚拟化系统连接了多个LUN&#xff0c;其中一个LUN上运行了数台虚拟机&#xff0c;虚拟机安装Windows Server操作系统。 服务器故障&分析&#xff1a; 管理员因误操作删除了一台虚拟机&#x…

PHPEXCEL 导出excel

$styleArray [alignment > [horizontal > Alignment::HORIZONTAL_CENTER,vertical > Alignment::VERTICAL_CENTER],];$border_style [borders > [allborders > [style > \PHPExcel_Style_Border::BORDER_THIN ,//细边框]]];$begin_date $request->beg…

Keil编译告警 warning: #1-D: last line of file ends without a newline

如题所示&#xff0c;Keil编译的时候&#xff0c;如果遇到了这个问题&#xff0c;就是文件最后一行并不是一个新行结尾。这个问题不影响编译结果&#xff0c;但是强迫症就受不了。 原因是源文件最后一行可能空出来了&#xff0c;但是有空格&#xff0c;如下所示&#xff1a; 这…

喜欢单片机?嵌入式高薪在招手!

嵌入式技术作为热门行业之一&#xff0c;近年来得到了广泛的关注和追捧。在众多嵌入式技术中&#xff0c;单片机技术因其小巧、低功耗和强大性能而备受青睐。下面我们将探讨为何喜欢单片机&#xff0c;以及嵌入式领域高薪工作的前景。 作为嵌入式系统的核心&#xff0c;单片机具…

分布式定时任务

分布式定时任务 背景xxl-job实战代码背景 在大多数业务场景中,非及时的数据同步,或者数据处理,都需要定时任务来处理 xxl-job 选型1.社区活跃度与文档完整度高 2.发迅速、学习简单、轻量级、易扩展 3.功能支持多 4.使用该框架的公司多,现登记有600多家公司已经应用该框架…