当前位置: 首页 > news >正文

【iOS】JSONModel的基本使用

文章目录

  • 前言
  • 一、导入JSONModel
  • 二、JSONModel的基本使用
    • 1.基本用法
    • 2.模型集合
    • 3.模型导出为NSDictionary或JSON
    • 4.设置所有属性可选(所有属性值可以为空)
    • 5.下划线(蛇式)转驼峰命名法


前言

JSONModel 是一个用于 Objective-C 的开源库,它用于简化 JSON 数据与 iOS 应用中的数据模型之间的转换。

其最主要的优点就是简化 JSON 数据解析与减少模型代码的编写,JSONModel可以将json数据直接映射到我们的对象中,对于我们获取的数据更加方便。同时对于模型的嵌套数据的获取更加便捷。


一、导入JSONModel

这里笔者在先前的博客中已经讲的很详细,不再赘述,详见【iOS】Cocoapods的安装以及使用


二、JSONModel的基本使用

单单讲解JSONModel理论知识过于抽象,笔者将会给出例子来对JSONModel进行讲解,JSONModel请求的网络数据的API如下:API
在这里插入图片描述

通过上图我们可以看到我们的Json数据共有三个字段,这三个字段就可以成为我们JSONModel类中的属性

1.基本用法

我们首先创建一个继承于JSONModel的TestModel,然后将字段作为该类中的属性

#import "JSONModel.h"
#import "Manager.h"
NS_ASSUME_NONNULL_BEGIN//{
//    "status":1,
//    "msg":"【更新内容】\r\n\r\n★ 多图有标记 流量壕忽略\r\n★ 出门前离线 没网也能看\r\n★ 喜欢请好评 不喜快吐槽\r\n★ 萌妹工程师 邮箱在下面\r\nmua@zhihu.com\r\n(一般人我们不告诉他)",
//    "latest":"2.5"
//}@interface TestModel : JSONModel@property (nonatomic, assign) int status;
@property (nonatomic, copy) NSString *msg;
@property (nonatomic, copy) NSString *latest;@endNS_ASSUME_NONNULL_END

然后我们在进行网络请求时将我们请求到的数据导入到我们的Model中

    [manager GET:url parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {TestModel *testModel = [[TestModel alloc] initWithDictionary:responseObject error:nil];NSLog(@"%@", testModel);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"Error: %@", error);}];

然后我们打印的到了如下数据


2.模型集合

但是如果对于我们的Json数据中有着key的嵌套,那么就会这样输出就会出现一些问题

例如此时我们请求的json数据如下:

{"date":"20231018","stories":[{"image_hue":"0xb3a27d","title":"长平之战,廉颇主张防守,是对是错?","url":"https:\/\/daily.zhihu.com\/story\/9766453","hint":"众人皆醒我独醉 · 7 分钟阅读","ga_prefix":"101807","images":["https:\/\/picx.zhimg.com\/v2-e3db2cb91bb097c111072487caf70737.jpg?source=8673f162"],"type":0,"id":9766453},{"image_hue":"0x6d502d","title":"不用化肥,如何让没有肥力的土地快速变得有肥?","url":"https:\/\/daily.zhihu.com\/story\/9766437","hint":"刘文龙PhD · 5 分钟阅读","ga_prefix":"101807","images":["https:\/\/picx.zhimg.com\/v2-709e63e4a8870b25887454f4f587234b.jpg?source=8673f162"],"type":0,"id":9766437},{"image_hue":"0x7c5b26","title":"瞎扯 · 如何正确地吐槽","url":"https:\/\/daily.zhihu.com\/story\/9766461","hint":"VOL.3215","ga_prefix":"101806","images":["https:\/\/picx.zhimg.com\/v2-924083b893973c3ae7d12b9c11155d8d.jpg?source=8673f162"],"type":0,"id":9766461}],"top_stories":[{"image_hue":"0xb3a27d","hint":"作者 \/ 众人皆醒我独醉","url":"https:\/\/daily.zhihu.com\/story\/9766453","image":"https:\/\/picx.zhimg.com\/v2-b3b010976682ab3b7ba240c318e3cf9b.jpg?source=8673f162","title":"长平之战,廉颇主张防守,是对是错?","ga_prefix":"101807","type":0,"id":9766453},{"image_hue":"0xb37229","hint":"作者 \/ 匿名用户","url":"https:\/\/daily.zhihu.com\/story\/9766426","image":"https:\/\/pic1.zhimg.com\/v2-15928648a5270b506392f48a7eee2d8c.jpg?source=8673f162","title":"你曾经被哪些自己所学专业的鬼畜知识震惊过?","ga_prefix":"101707","type":0,"id":9766426},{"image_hue":"0x3b3045","hint":"作者 \/ 单长殷","url":"https:\/\/daily.zhihu.com\/story\/9766350","image":"https:\/\/pic1.zhimg.com\/v2-52190997fe05a0af480a2ae26c3775a9.jpg?source=8673f162","title":"小事 · 哪些时刻让你体会到「知识的实用与浪漫」?","ga_prefix":"101407","type":0,"id":9766350}]
}

Model属性如下:

//声明网络请求中要接受数据的两个协议
@protocol StoriesModel
@end@protocol Top_StoriesModel
@end#import "JSONModel.h"NS_ASSUME_NONNULL_BEGIN@interface StoriesModel : JSONModel
@property (nonatomic, copy) NSString* image_hue;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* url;
@property (nonatomic, copy) NSString* hint;
@property (nonatomic, copy) NSString* ga_prefix;
@property (nonatomic, copy) NSString* type;
@property (nonatomic, copy) NSString* id;@end@interface Top_StoriesModel : JSONModel
@property (nonatomic, copy) NSString* image_hue;
@property (nonatomic, copy) NSString* hint;
@property (nonatomic, copy) NSString* url;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* ga_prefix;
@property (nonatomic, copy) NSString* type;
@property (nonatomic, copy) NSString* id;@end@interface TestModel3 : JSONModel
@property (nonatomic, copy) NSString *date;//三个同类型的
@property (nonatomic, copy) NSArray<StoriesModel>* stories;
@property (nonatomic, copy) NSArray<Top_StoriesModel>* top_stories;@endNS_ASSUME_NONNULL_END

注意:NSArray后的<>包含一个协议。这与OC泛型系统不同。它们不是相互排斥的,但是对于JSONModel来说,协议必须到位。

此时我们仍然直接打印我们的Model

    [manager GET:url parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {TestModel3 *testModel = [[TestModel3 alloc] initWithDictionary:responseObject error:nil];NSLog(@"%@", testModel);mainModelBolck(testModel);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"Error: %@", error);}];

出现如下结果:

<TestModel3> [date]: 20231018[stories]: ("<StoriesModel> \n   [image_hue]: 0xb3a27d\n   [ga_prefix]: 101807\n   [id]: 9766453\n   [title]: \U957f\U5e73\U4e4b\U6218\Uff0c\U5ec9\U9887\U4e3b\U5f20\U9632\U5b88\Uff0c\U662f\U5bf9\U662f\U9519\Uff1f\n   [hint]: \U4f17\U4eba\U7686\U9192\U6211\U72ec\U9189 \U00b7 7 \U5206\U949f\U9605\U8bfb\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766453\n</StoriesModel>","<StoriesModel> \n   [image_hue]: 0x6d502d\n   [ga_prefix]: 101807\n   [id]: 9766437\n   [title]: \U4e0d\U7528\U5316\U80a5\Uff0c\U5982\U4f55\U8ba9\U6ca1\U6709\U80a5\U529b\U7684\U571f\U5730\U5feb\U901f\U53d8\U5f97\U6709\U80a5\Uff1f\n   [hint]: \U5218\U6587\U9f99PhD \U00b7 5 \U5206\U949f\U9605\U8bfb\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766437\n</StoriesModel>","<StoriesModel> \n   [image_hue]: 0x40312d\n   [ga_prefix]: 101807\n   [id]: 9766445\n   [title]: \U5982\U679c\U6c38\U751f\U4eba\U7c7b\U7ec6\U80de\U300c\U6d77\U62c9\U7ec6\U80de\U300d\U6cc4\U9732\U4e86\U4f1a\U6709\U5371\U9669\U5417\Uff1f\n   [hint]: \U567c\U91cc\U556a\U5566\U7830 \U00b7 1 \U5206\U949f\U9605\U8bfb\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766445\n</StoriesModel>","<StoriesModel> \n   [image_hue]: 0x6d9c95\n   [ga_prefix]: 101807\n   [id]: 9766457\n   [title]: \U5fae\U8f6f\U7b97\U6cd5\U9762\U8bd5\U9898\U300c\U5224\U65ad\U9ebb\U5c06\U662f\U5426\U548c\U724c\U300d\U5e94\U8be5\U5982\U4f55\U505a\Uff1f\n   [hint]: \U8001\U987d\U7ae5 \U00b7 22 \U5206\U949f\U9605\U8bfb\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766457\n</StoriesModel>","<StoriesModel> \n   [image_hue]: 0x7c5b26\n   [ga_prefix]: 101806\n   [id]: 9766461\n   [title]: \U778e\U626f \U00b7 \U5982\U4f55\U6b63\U786e\U5730\U5410\U69fd\n   [hint]: VOL.3215\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766461\n</StoriesModel>")[top_stories]: ("<Top_StoriesModel> \n   [image_hue]: 0xb3a27d\n   [ga_prefix]: 101807\n   [id]: 9766453\n   [title]: \U957f\U5e73\U4e4b\U6218\Uff0c\U5ec9\U9887\U4e3b\U5f20\U9632\U5b88\Uff0c\U662f\U5bf9\U662f\U9519\Uff1f\n   [hint]: \U4f5c\U8005 / \U4f17\U4eba\U7686\U9192\U6211\U72ec\U9189\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766453\n</Top_StoriesModel>","<Top_StoriesModel> \n   [image_hue]: 0xb37229\n   [ga_prefix]: 101707\n   [id]: 9766426\n   [title]: \U4f60\U66fe\U7ecf\U88ab\U54ea\U4e9b\U81ea\U5df1\U6240\U5b66\U4e13\U4e1a\U7684\U9b3c\U755c\U77e5\U8bc6\U9707\U60ca\U8fc7\Uff1f\n   [hint]: \U4f5c\U8005 / \U533f\U540d\U7528\U6237\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766426\n</Top_StoriesModel>","<Top_StoriesModel> \n   [image_hue]: 0x2e6889\n   [ga_prefix]: 101607\n   [id]: 9766400\n   [title]: \U4e3a\U4ec0\U4e48\U6709\U300c\U597d\U5403\U300d\U7684\U8bf4\U6cd5\Uff0c\U6ca1\U6709\U300c\U574f\U5403\U300d\U7684\U8bf4\U6cd5\Uff1f\n   [hint]: \U4f5c\U8005 / \U591a\U90bb\U56fdDuolingo\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766400\n</Top_StoriesModel>","<Top_StoriesModel> \n   [image_hue]: 0x8f8164\n   [ga_prefix]: 101507\n   [id]: 9766378\n   [title]: \U5c0f\U4e8b \U00b7 \U6709\U54ea\U4e9b\U8ba9\U4f60\U5fc3\U9178\U7684\U6545\U4e8b\Uff1f\n   [hint]: \U4f5c\U8005 / \U9ec4\U4e0d\U4f1a\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766378\n</Top_StoriesModel>","<Top_StoriesModel> \n   [image_hue]: 0x3b3045\n   [ga_prefix]: 101407\n   [id]: 9766350\n   [title]: \U5c0f\U4e8b \U00b7 \U54ea\U4e9b\U65f6\U523b\U8ba9\U4f60\U4f53\U4f1a\U5230\U300c\U77e5\U8bc6\U7684\U5b9e\U7528\U4e0e\U6d6a\U6f2b\U300d\Uff1f\n   [hint]: \U4f5c\U8005 / \U5355\U957f\U6bb7\n   [type]: 0\n   [url]: https://daily.zhihu.com/story/9766350\n</Top_StoriesModel>")
</TestModel3>

因为我们的StoriesModelTop_StoriesModel属于是被TestModel3嵌套的Model,因此我们直接打印TestModel3的对象时storiestop_stories中的数据时打印得到的是其并未转换为NSString的数据,而是Unicode 转义序列的字符串

如果我们想要得到里面的对象转换为字符串的数据,我们需要事先声明一个嵌套的Model属性

@property (nonatomic, copy)StoriesModel *t;

然后将大Model中的数组赋值给小Model

	TestModel3 *testModel = [[TestModel3 alloc] initWithDictionary:responseObject error:nil];self.t = testModel.stories[0];NSLog(@"%@", self.t);

打印得到:
在这里插入图片描述

我们的testModel中的两个NSArray中的对象类型是两个协议,这两个协议的作用是定义了数据模型的接口规范,以便 JSONModel
库知道如何将 JSON 数据映射到具体的对象
。通过采用这种方式,可以更灵活地定义数据模型对象,适应不同类型的数据,并在解析 JSON
数据时保持一致性。这使得你可以更容易地将 JSON 数据映射到相应的数据模型对象,以便在应用中使用这些数据。


3.模型导出为NSDictionary或JSON

ProductModel *pm = [ProductModel new];
pm.name = @"Some Name";// convert to dictionary
NSDictionary *dict = [pm toDictionary];// convert to json
NSString *string = [pm toJSONString];

4.设置所有属性可选(所有属性值可以为空)

设置所有属性可选的意义在于即使我们解析Json数据时即使返回为空也不会导致程序崩溃

@implementation TestModel3
+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}
@end@implementation StoriesModel
+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}
@end@implementation Top_StoriesModel
+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}@end

但是官方建议尽量避免使用该方法(即使要全部属性为可选,也尽量是在每个属性那里标注为Optional)

@property (nonatomic, strong) NSString<Optional>* optionalProperty;

5.下划线(蛇式)转驼峰命名法

{"order_id": 104,"order_product": "Product #1","order_price": 12.95
}
@interface OrderModel : JSONModel
@property (nonatomic) NSInteger orderId;
@property (nonatomic) NSString *orderProduct;
@property (nonatomic) float orderPrice;
@end@implementation OrderModel+ (JSONKeyMapper *)keyMapper
{return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase];
}@end

相关文章:

【iOS】JSONModel的基本使用

文章目录 前言一、导入JSONModel二、JSONModel的基本使用1.基本用法2.模型集合3.模型导出为NSDictionary或JSON4.设置所有属性可选&#xff08;所有属性值可以为空&#xff09;5.下划线(蛇式)转驼峰命名法 前言 JSONModel 是一个用于 Objective-C 的开源库&#xff0c;它用于简…...

imu预积分学习(更新中)

imu预积分学习&#xff08;更新中&#xff09; IMU预积分可以做什么&#xff1f; 以上面那个经典图片为例子&#xff0c;IMU可以通过六轴数据&#xff0c;拿到第i帧和第j帧之间的相对位姿&#xff0c;这样不就可以去用来添加约束了吗 但是有一个比较大的问题是&#xff1a; I…...

算法刷题-链表

算法刷题-链表 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]…...

Linux 挂载磁盘到指定目录

问题&#xff1a;公司分配了数据磁盘&#xff0c;但是分区也没有挂载到目录 首先 df -h 查看一下挂载点的情况 查看服务器上未挂载的磁盘 fdisk -l 注&#xff1a;图中sda、sdb &#xff08;a、b指的是硬盘的序号&#xff09; 分区操作 我们可以看到b硬盘有536G未分区&…...

ZYNQ linux调试LCD7789

一,硬件管脚 1,参数解释和实物 LVGL是一个开源的图形库,主要用于MCU上屏幕UI的部署,功能完善,封装合理,可裁切性强,也可以实现Linux上fbx的部署。LVGL官网LVGL - Light and Versatile Embedded Graphics Library 每根线的作用...

【双向链表的插入和删除】

文章目录 双向链表双向链表的插入双向链表的删除操作 双向链表 双向链表的结构定义如下&#xff1a; //双向链表的结构定义 typedef struct DuLNode {ElemType data;struct DuLNode* prior, * next; }DuLNode,*DuLinkList;双向链表的结点有两个指针域&#xff1a;prior&#…...

【Android知识笔记】Webview专题

WebView 核心组件 类名作用常用方法WebView创建对象加载URL生命周期管理状态管理loadUrl():加载网页 goBack():后退WebSettings配置&管理 WebView缓存:setCacheMode() 与JS交互:setJavaScriptEnabled()WebViewClient处理各种通知&请求事件should...

Leetcode第 368 场周赛

元素和最小的山形三元组 II 预处理前缀和后缀最小值,记为pre[i]和sa[i] 对于当前编号i&#xff0c;如果前面的最小值和后面的最大值都小于nums[i],则记录ans[i] nums[i]pre[i-1]sa[i1] 结果输出最小的ans[i]即可。 合法分组的最少组数 统计每一个数字出现的次数。将每一个数…...

Mysql数据库 3.SQL语言 DML数据操纵语言 增删改

DML语句&#xff1a;用于完成对数据表中数据的插入、删除、修改操作 一.表数据插入 插入数据语法&#xff1a; 步骤例&#xff1a; 1.声明数据库&#xff1a;use 数据库名; 2.删除操作&#xff1a;drop table if exists 表名; 3.创建数据库中的表&#xff1a;create table 表…...

Java中,如何去掉字符串中前面所有的0

大家好&#xff0c;我是三叔&#xff0c;这期主要给大家分享下在开发中使用的字符串的一些常见方法。 例如&#xff1a;00000000110&#xff0c;现在需要去掉前面所有补的0&#xff0c;得到110&#xff0c;相信大家在开发中肯定有遇到过类似的开发需求&#xff0c;如何做&…...

数组能开空间大小

奈何辰星无可奈_leetcode,中等难度,算法-CSDN博客 这个博客介绍的很好&#xff0c;可以参考下...

Python 数据类 - dataclass 的作用与不足

https://docs.python.org/zh-cn/3/library/dataclasses.html https://peps.python.org/pep-0526/ https://peps.python.org/pep-0557/ dataclass 简单示例 from dataclasses import dataclassdataclass class User:name: strage: intif __name__ __main__:response_json {na…...

【C++初阶】类与对象(一)

目录 1、初识面向对象思想2、类 struct2.1 C中的struct及使用 3、类 class3.1 类的定义3.2 类的访问限定符3.2.1 访问限定符是什么3.2.2 访问限定符的使用3.2.3 访问限定符的使用规范3.2.4 访问限定符与封装 3.3 类做声明和定义分离3.3.1 声明和定义分离3.3.2 在函数声明的地方…...

thinkPHP框架详解+部署

目录 什么是ThinkPHP: ThinkPHP的主要特性&#xff1a; 什么是ThinkPHP: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架&#xff0c;诞生于2006年初&#xff0c;由国内的技术爱好者创建&#xff0c;遵循Apache2开源协议发布&#xff0c;是为了敏捷WEB应用开发和…...

Java拦截器(Interceptor)和过滤器(Filter)实例详解

一、Java过滤器和拦截器 1.1、过滤器(Filter) Filter过滤器&#xff0c;是Servlet&#xff08;Server Applet&#xff09;技术中的技术&#xff0c;开发人员可以通过Filter技术&#xff0c;管理web资源&#xff0c;可以对指定的一些行为进行拦截&#xff0c;例如URL级别的权限…...

通过热敏电阻计算温度(二)---ODrive实现分析

文章目录 通过热敏电阻计算温度&#xff08;二&#xff09;---ODrive实现分析测量原理图计算分析计算拟合的多项式系数根据多项式方程计算温度的函数温度计算调用函数 通过热敏电阻计算温度&#xff08;二&#xff09;—ODrive实现分析 ODrive计算热敏电阻的温度采用的时B值的…...

基于typescript+express实现一个简单的接口权限验证

package.json "scripts": {"start": "nodemon src/main.ts","start:a": "nodemon src/a.ts","build": "tsc","build:dev": "tsc src/main.ts"}, express服务器文件 import * as…...

yolov7改进优化之蒸馏(二)

续yolov7改进优化之蒸馏&#xff08;一&#xff09;-CSDN博客 上一篇已经基本写出来yolov7/v5蒸馏的整个过程&#xff0c;不过要真的训起来我们还需要进行一些修改。 Model修改 蒸馏需要对teacher和student网络的特征层进行loss计算&#xff0c;因此我们forward时要能够返回需…...

生产与作业管理(POM)的历史

1800年&#xff0c;惠特尼&#xff1a;零件标准化、质量管理。 1881年&#xff0c;泰勒&#xff1a;人员选拔、计划和时程安排、动作研究。管理与劳动分开。 - 使雇员与工作相适应。 - 提供适当的训练。 - 提供正确的工作方法和工具。 - 建立适当的激励机制促使工作得以完成。 …...

交换机基础(二)

一、VLAN 基础知识 虚拟局域网 (Virtual Local Area Network,VLAN) 是一种将局域网设 备从逻辑上划分成一个个网段&#xff0c;从而实现虚拟工作组的数据交换技术。 这一技术主要应用于3层交换机和路由器中&#xff0c;但主流应用还是在3层交换机中。 VLAN 是基于物理网络上构建…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...