Native JSON : window.JSON解析json data

测试浏览器对window.JSON的支持情况 ECMA-262标准第5版已经内置了JSON对象,最新的浏览器都已经支持了,但老的浏览器还未完全退出市场,不能完全忽略。 在地球被HTML5完全占领之前,测试一下各浏览器(主要是IE8)对内置 window.JSON 的支持情况,顺便也测了一下Box Model盒模型。 主页面代码:index.html 脚本代码:test.js function p 阅读详情

Internet Explorer 8, Firefox 3.5+, Safari 4+, Chrome, and Opera 10+ (I think) support native JSON parsing. Don't count on it being available, but if it is, definitely use it for a performance boost, as well as guaranteed security.

Links to how it works:

如果没有window.JSON, 可以使用其他方法,兼容方法如下(来自jQuery core):

 

 

React Native UI Toolkit选型实战:SafeArea与渲染契约深度解析 React Native UI Toolkit并非简单组件集合,而是JS声明与Native渲染之间确定性映射的工程实现。其核心在于对SafeAreaProvider语义、无障碍继承链、平台差异化渲染(如iOS UITextField vs Android AppCompatEditText)等底层渲染契约的理解深度。真正影响跨平台一致性的,不是组件数量,而是Toolkit能否在Android 14 WindowInsets变更、折叠屏动态安全区、键盘事件生命周期等场景下保持渲染可预测性。技术价值体现在减少3 阅读详情

相关推荐

逆向工程实战:AKM 3.0风控sensor_data生成与_abck令牌获取全解析

在Web安全与数据采集领域,绕过高级反爬虫机制是开发者面临的常见挑战。其核心原理在于客户端环境指纹的采集与验证,风控系统通过收集浏览器特征、硬件信息与行为数据,构建唯一的设备标识以区分真人用户与自动化脚本。这项技术的工程价值在于保障数据采集的稳定性与效率,避免因频繁封禁导致业务中断。典型的应用场景包括电商价格监控、社交媒体数据聚合以及物流信息追踪等。本文聚焦于Akamai Bot Manager 3.0这一业界广泛采用的风控方案,深入剖析其关键的sensor_data参数生成机制与_abck令牌获取流程。通

weixin_34082695的博客 396

JS中,eval, new Function, native处理JSON的性能比较

JSON作为JS中一种数据格式,应用非常广泛,在JS中,处理JSON的方法有三种,下面分别介绍这三种方式的使用方法及这三种方法的性能比较。   var jsonString;   一、eval 方式:   var str = eval('('+ jsonString +')'); 1、为什么要加括号? 加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候...

iteye_9861的博客 579

React Native在OpenHarmony上的长按事件实现与优化

跨平台开发框架React Native通过JavaScript桥接技术实现原生组件调用,其核心价值在于提升代码复用率和开发效率。在OpenHarmony分布式操作系统上集成React Native时,手势事件处理是需要重点关注的领域,特别是长按事件这类基础交互。本文深入解析了React Native与OpenHarmony ArkUI框架的事件通信机制,详细说明了如何通过NDK层桥接实现TouchableOpacity组件的长按功能,包括默认时长适配、触摸区域优化等关键技术点。针对智能家居等物联网应用场景,

weixin_33824363的博客 451

window.Date、Math、JSON用法解读

目录一、前言 一、前言 相信只要对前端有所了解的同学,对window上的Date、Math和JSON这三个原生对象(或构造函数)都不会陌生,不过却未必全面了解过它们的用法。 首先我们先来简述这三个原生对象的作用。 ...

夕山雨的博客 1198

微信支付Native下单API实战:从异步通知到幂等性设计的完整指南

在线支付是现代商业应用的核心基础设施,其核心原理在于通过安全的网络协议和加密技术,在商户与支付网关之间建立可信的交易通道。该技术通过异步通知机制确保交易状态的最终一致性,解决了网络延迟和系统故障可能导致的数据不一致问题,从而保障了资金流与信息流的可靠同步。这一设计对于电商、O2O、SaaS订阅等需要高可靠性收款的场景至关重要。在工程实践中,实现支付功能不仅涉及API调用,更关键的是处理支付结果通知和保证业务逻辑的幂等性。开发者需要深入理解异步通知流程,并设计严谨的幂等性方案,例如通过数据库唯一索引或状态机校

cunfuteng7334的博客 493

React Native与OpenHarmony跨平台弹窗组件开发实践

跨平台开发框架如React Native通过JavaScript/TypeScript实现接近原生的应用体验,而OpenHarmony作为新兴的分布式操作系统,其UI渲染机制与事件处理与传统移动平台存在显著差异。在技术实现层面,组件化开发与原生能力集成是关键,需要处理平台特性差异、性能优化等核心挑战。特别是在弹窗组件开发中,动画效果、触摸事件处理和内存管理直接影响用户体验。本文以Modal组件为例,详细解析如何在React Native中适配OpenHarmony平台,包括鸿蒙特有API调用、分布式能力集成

weixin_30399155的博客 385

python实现12306购票下单

2:进入购票页面获取到提交参数的SubmitToken,同时提交订单时候有一个加密参数,通过分析页面的js代码,发现在页面加载时候就触发的方法挂载了全局的window.json_ua.toString(),我们使用浏览迷模拟这个js执行结果获取加密参数encryptedData,最终通过调用https://kyfw.12306.cn/passport/web/auth/uamtk获取票据,然后根据票据换取全局cookie的tk。废话不多说,先人工走一遍流程,打开查询高铁的页面发现查询接口。

weixin_42496578的博客 4213

json-benchmark:Rust中的nativejson-benchmark

Rust JSON基准测试 这是Rust的的部分端口。 测试的库是: 1.0.53 0.12.4 0.3.24 0.1.26(这需要现代的x86 CPU才能获得良好的效果) $ cargo run --release DOM STRUCT ======= serde_json ======= parse|stringify ===== parse|stringify ==== data/canada.json 280 MB/s 370 MB/s 510 MB/s

ALIPAY WEB 登陆rsa加密 分析记录

测试地址 https://auth.alipay.com/login/h5Login.htm?goto=https%3A%2F%2Fauthweb.alipay.com%2Fmobile%2Fauth%3Fv%3Dh5%26auth_type%3DAUTHACCOUNT%26biz_type%3Dopenservice%26sign%3DAIuHm3Q7BaDWv39Hu7udymjfpncLygKpen%252FNcZVABL8%253D%26pid%3D2088821693967553%26targe

六桥风月IT随笔 2430

json解析库(json-c-0.8,windows版)

编译好的 windows 版的 json-c-0.8 库。压缩包里面包含三个文件夹..\include,..\lib,..\src,”lib\“下有.lib和.dll。要使用该库,需要包含 json.h, json_object.h, json_tokener.h.

nativejson-benchmark, C/C JSON解析器/生成器基准.zip

nativejson-benchmark, C/C JSON解析器/生成器基准 原生JSON基准Copyright(c) 2014 -2016 ( miloyip@gmail.com ) 简介这个基准测试使用JSON解析/生成功能评估 41开源 C/C 库的一致性和性能。 性能意味着速度。内存和代码大小。

React Native ECharts核心组件深度解析:Echarts组件工作原理揭秘

React Native ECharts是React Native平台上最强大的图表库之一,它完美地将百度ECharts的强大可视化功能带入了移动端开发领域。对于想要在React Native应用中实现专业级数据可视化的开发者来说,这个组件库无疑是最佳选择。本文将深度解析React Native ECharts的核心组件工作原理,帮助您全面理解这个强大的图表库。 ## 🚀 React Nati

gitblog_00782的博客 1045

OpenClaw 企业级自动化系统架构设计与实现

本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。

2604_95445636的博客 484

JSON.parse与stringify深度解析:原理、边界与工程实践

JSON 是 Web 数据交换的基础格式,其核心能力由 JSON.parse 和 JSON.stringify 两个标准化方法提供。它们并非简单类型转换工具,而是遵循 RFC 8259 的严格语法解析器与序列化协议,具备确定性行为、跨运行时一致性及可预测的类型裁剪规则。理解其字符级校验、循环引用处理、时间/大数精度限制、reviver/replacer 执行时机等底层机制,是构建可靠 localStorage 持久化、postMessage 跨端通信、Web Worker 数据管道和防崩溃 API 解析器的

weixin_34408717的博客 567

将pytorch的权值矩阵量化为定点数补码并导入FPGA中

Xilinx FPGA实现LSTM算法时对ROM的初始化 将pytorch框架的权重矩阵以定点数补码的形式导入到FPGA中 文章目录Xilinx FPGA实现LSTM算法时对ROM的初始化1. pytorch框架中的LSTM2. 初始化一个RNN模型 3. 初始化ROM的coe文件格式 4. 将参数转换为补码,并且输出到coe文件 5. 配置一个ROM 6. 结论7. 代码 1. pytorch框架中的LSTM pytorch框架将LSTM算法中的八个权值矩阵连接成两个矩阵,假设要导入的LSTM网络的输

随缘分享 4528

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

帮助你解决在使用CMT2300A 时遇到的各种问题,若有需要,请及时与我交流

teleger的博客 1429

Apache APISIX 的 graphql-limit-count 插件:基于查询成本模型的 GraphQL 限流实战

`graphql-limit-count` 是 Apache APISIX 中的一个插件,在固定时间窗口内基于 GraphQL 查询本身的“昂贵程度”来限流。与 [limit-count](https://link.gitcode.com/i/1327c53b583a6013fda38a8ef31d9fb5) 插件每个请求固定消耗 1 个配额不同,它通过解析 GraphQL 查询的 AST,按查询

gitblog_00199的博客 738

C语言实现AES加解密

C语言实现AES加解密 #include<stdio.h> #include<string.h> #include<time.h> #include<windows.h> #define Nb 4 //数据块行数 #define Nk 4 //密码块行数 #define Nr 10 //轮加密次数 unsigned char RoundKey[4*Nb*(Nr+1)]; //轮密钥 unsigned char Key[17];

qq_44310495的博客 8891

React Native组件生命周期:从创建到销毁的完整流程

React Native组件生命周期是每个开发者必须掌握的核心概念,它描述了组件从初始化到渲染、更新再到卸载的完整过程。理解这些生命周期方法能帮助你优化应用性能、管理资源以及处理组件状态变化。本文将通过直观的流程图和实际应用场景,带你全面掌握React Native组件生命周期的每个关键环节。 ## 一、组件生命周期全景:从诞生到消亡的旅程 React Native组件的生命周期可以分为三个主

gitblog_01106的博客 1107

LPDDR6来了!带你一文看懂它和LPDDR5/5X的差距 + 技术演进逻辑全解析

🧠从速率到架构,从总线宽度到协议设计,LPDDR6 每一个改动都不是拍脑袋做的,它针对的是AI / HPC / 云计算 / 下一代笔记本平台的真实需求。作为工程师的我们,不仅要“用得上”,更要“测得准”,因为没有测试验证,就没有量产落地!🎯LPDDR6不是未来,而是现在进行时!

weixin_43199439的博客 2173

【Bug已解决】openclaw max turns reached / Tool calls exceeded limit — OpenClaw 最大轮次超限解决方案

OpenClaw 在执行过程中达到最大轮次限制任务未完成,本质是 --max-turns 设置过小或任务过于复杂。文中给出增加轮次、--continue 继续、分步执行等完整方案。

一键难忘的博客 5505

【开源软件移植】鸿蒙 PC 三方库适配实战:从 7-Zip Native 编译到 ArkTS 调用完整跑通

本文记录了将7-Zip压缩功能适配为HarmonyOS PC可复用三方库的完整过程。通过裁剪7-Zip 26.01源码,使用CMake交叉编译为Native库,并通过Node-API暴露给ArkTS调用,最终打包成HAR/OHPM可复用库。项目实现了.7z格式的压缩、解压和测试功能,在鸿蒙PC设备上验证通过。文章详细介绍了工程结构、环境配置和适配过程中的关键点,包括Native编译、NAPI异步任务处理等难点,为开源软件移植鸿蒙生态提供了实战参考。

一键难忘的博客 4万+

机器人的“大脑”进化论:从专用控制器到高性能SoC的异构计算时代

摘要:随着AI与机器人技术融合,高性能芯片成为机器人智能化的关键。本文分析了机器人对芯片的核心需求,包括多模态数据处理、实时控制和智能决策能力。系统级芯片(SoC)因集成CPU、GPU/NPU等模块而成为主流选择。市场呈现分层格局:中低端设备(如扫地机器人)采用"MCU+轻量SoC"方案,满足基础功能;高端机器人则依赖"高性能SoC+独立GPU"处理复杂任务。除主控芯片外,完整的机器人系统还需传感器接口、驱动、通信等配套芯片。未来,芯片技术的进步将持续推动机器人智能化

致力于lidar应用开发 83

React Native在OpenHarmony开发动漫应用实践

跨平台开发框架React Native(简称RN)通过JavaScript核心与原生组件桥接的技术原理,大幅提升了多端应用开发效率。其热更新机制和丰富的社区生态使其成为移动开发的热门选择,特别适合需要快速迭代的内容型应用。在分布式操作系统OpenHarmony环境下,RN框架能够利用ACE引擎的优化支持,结合Flex布局系统快速构建响应式界面。本文以动漫类应用AnimeHub为例,展示了如何通过RN+OpenHarmony技术栈实现热门排行功能,包括数据获取与分布式缓存、瀑布流布局优化等典型场景,并特别介绍

weixin_30696427的博客 351

一文吃透 SAP IDoc 状态码:从 TEDS1 到 WE02 排障,再到 ABAP 自动化监控

在 SAP 集成场景里,IDoc 往往是最常见、也最容易被低估的一条生命线:采购订单、发票、主数据、库存移动……只要系统之间要稳定地交换结构化业务数据,IDoc 就经常登场。真正让人头疼的,并不是 IDoc 本身,而是它在链路里到底走到了哪一步、卡在了哪里、该找谁背锅。这篇文章把常用的 IDoc 状态码按出站、入站拆开讲清楚,并且把每个状态对应的真实世界故障现象、排查入口、以及可以落地的 ABAP 监控代码串起来,让你看到状态码就能想到动作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 406

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

React Native Owl在CI/CD中的应用:GitHub Actions配置教程,实现自动化视觉测试

React Native Owl是一款专为React Native应用打造的视觉回归测试库,能够帮助开发者在项目中轻松引入视觉回归测试。通过自动化检测UI变化,它可以有效防止意外的界面改动,确保应用视觉一致性。本文将详细介绍如何在GitHub Actions中配置React Native Owl,实现自动化视觉测试流程。 ## 📌 什么是视觉回归测试?为什么需要它? 视觉回归测试是通过对比应

gitblog_00901的博客 321

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: ieEngineVersion
下一篇: forEach
FuDesign2008
博客等级 码龄18年 44粉丝 119原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值