跳到主要内容鸿蒙金融理财全栈项目:风险控制、合规审计与产品创新 | 极客日志TypeScriptPay大前端
鸿蒙金融理财全栈项目:风险控制、合规审计与产品创新
鸿蒙金融理财应用实现风险控制、合规审计及产品创新功能。通过分层架构设计风险评估、监控及预警机制,集成合规检查与报告生成模块,支持新产品开发与优化推广。代码基于 ArkTS 语言,涵盖单例模式工具类封装与 ArkUI 页面交互逻辑,确保金融场景下的安全性与合规性。
晚风告白19 浏览 风险控制基础
1.1 风险控制定义
风险控制是指对金融理财项目的风险进行识别、评估、监控、预警的过程,主要包括以下方面:
- 风险评估:评估用户的风险承受能力;
- 风险监控:监控金融产品的风险;
- 风险预警:对风险进行预警。
1.2 风险控制架构
风险控制采用分层架构,由以下部分组成:
- 风险评估层:负责用户的风险评估;
- 风险监控层:负责金融产品的风险监控;
- 风险预警层:负责对风险进行预警。
风险控制实战
2.1 实战目标
基于金融场景的风险控制要求,实现以下功能:
- 风险评估:评估用户的风险承受能力;
- 风险监控:监控金融产品的风险;
- 风险预警:对风险进行预警。
2.2 风险评估实现
1. 风险评估工具类
entry/src/main/ets/utils/RiskAssessmentUtil.ets
import risk from '@ohos.risk';
export class RiskAssessmentUtil {
private static instance: RiskAssessmentUtil | null = null;
private riskHelper: risk.RiskHelper | null = null;
static getInstance(): RiskAssessmentUtil {
if (!RiskAssessmentUtil.instance) {
RiskAssessmentUtil.instance = new RiskAssessmentUtil();
}
.;
}
(): <> {
(!.) {
. = risk.();
}
}
(): <risk.> {
(!.) {
;
}
result = ..();
result;
}
(): <risk.> {
(!.) {
;
}
result = ..();
result;
}
}
return
RiskAssessmentUtil
instance
async
init
Promise
void
if
this
riskHelper
this
riskHelper
createRiskHelper
async
assessUserRisk
Promise
RiskAssessmentResult
if
this
riskHelper
return
null
const
await
this
riskHelper
assessUserRisk
return
async
getUserRiskAssessmentReport
Promise
UserRiskAssessmentReport
if
this
riskHelper
return
null
const
await
this
riskHelper
getUserRiskAssessmentReport
return
2. 风险评估应用
entry/src/main/ets/pages/RiskAssessmentPage.ets
import { RiskAssessmentUtil } from '../utils/RiskAssessmentUtil';
@Entry
@Component
struct RiskAssessmentPage {
@State riskAssessmentResult: risk.RiskAssessmentResult | null = null;
build() {
Column({ space: 16 }) {
Text('风险评估').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ButtonComponent({ text: '进行风险评估', onClick: async () => {
await this.assessUserRisk();
}, disabled: false });
if (this.riskAssessmentResult) {
Text(`风险等级:${this.riskAssessmentResult.riskLevel}`).fontSize(14).textColor('#000000');
Text(`风险得分:${this.riskAssessmentResult.riskScore}`).fontSize(14).textColor('#666666');
Text(`风险描述:${this.riskAssessmentResult.riskDescription}`).fontSize(14).textColor('#666666');
}
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
RiskAssessmentUtil.getInstance().init();
}
async assessUserRisk(): Promise<void> {
this.riskAssessmentResult = await RiskAssessmentUtil.getInstance().assessUserRisk();
}
}
2.3 风险监控实现
1. 风险监控工具类
entry/src/main/ets/utils/RiskMonitoringUtil.ets
import monitoring from '@ohos.monitoring';
export class RiskMonitoringUtil {
private static instance: RiskMonitoringUtil | null = null;
private monitoringHelper: monitoring.MonitoringHelper | null = null;
static getInstance(): RiskMonitoringUtil {
if (!RiskMonitoringUtil.instance) {
RiskMonitoringUtil.instance = new RiskMonitoringUtil();
}
return RiskMonitoringUtil.instance;
}
async init(): Promise<void> {
if (!this.monitoringHelper) {
this.monitoringHelper = monitoring.createMonitoringHelper();
}
}
async monitorFinancialProductRisk(): Promise<Array<monitoring.FinancialProductRisk>> {
if (!this.monitoringHelper) {
return [];
}
const result = await this.monitoringHelper.monitorFinancialProductRisk();
return result;
}
async getFinancialProductRiskReport(productId: number): Promise<monitoring.FinancialProductRiskReport> {
if (!this.monitoringHelper) {
return null;
}
const result = await this.monitoringHelper.getFinancialProductRiskReport(productId);
return result;
}
}
2. 风险监控应用
entry/src/main/ets/pages/RiskMonitoringPage.ets
import { RiskMonitoringUtil } from '../utils/RiskMonitoringUtil';
@Entry
@Component
struct RiskMonitoringPage {
@State financialProductRisk: Array<monitoring.FinancialProductRisk> = [];
build() {
Column({ space: 16 }) {
Text('风险监控').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.financialProductRisk, renderItem: (item: monitoring.FinancialProductRisk, index: number) => {
Row({ space: 16 }) {
Text(item.productName).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(`风险等级:${item.riskLevel}`).fontSize(14).textColor('#666666');
Text(`风险得分:${item.riskScore}`).fontSize(14).textColor('#666666');
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: monitoring.FinancialProductRisk, index: number) => {
router.pushUrl({ url: '/pages/FinancialProductRiskReportPage', params: { productId: item.productId } });
}});
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
RiskMonitoringUtil.getInstance().init();
this.monitorFinancialProductRisk();
}
async monitorFinancialProductRisk(): Promise<void> {
this.financialProductRisk = await RiskMonitoringUtil.getInstance().monitorFinancialProductRisk();
}
}
2.4 风险预警实现
1. 风险预警工具类
entry/src/main/ets/utils/RiskWarningUtil.ets
import warning from '@ohos.warning';
export class RiskWarningUtil {
private static instance: RiskWarningUtil | null = null;
private warningHelper: warning.WarningHelper | null = null;
static getInstance(): RiskWarningUtil {
if (!RiskWarningUtil.instance) {
RiskWarningUtil.instance = new RiskWarningUtil();
}
return RiskWarningUtil.instance;
}
async init(): Promise<void> {
if (!this.warningHelper) {
this.warningHelper = warning.createWarningHelper();
}
}
async issueRiskWarning(): Promise<Array<warning.RiskWarning>> {
if (!this.warningHelper) {
return [];
}
const result = await this.warningHelper.issueRiskWarning();
return result;
}
async handleRiskWarning(warningId: number): Promise<warning.RiskWarningResult> {
if (!this.warningHelper) {
return null;
}
const result = await this.warningHelper.handleRiskWarning(warningId);
return result;
}
}
2. 风险预警应用
entry/src/main/ets/pages/RiskWarningPage.ets
import { RiskWarningUtil } from '../utils/RiskWarningUtil';
@Entry
@Component
struct RiskWarningPage {
@State riskWarning: Array<warning.RiskWarning> = [];
build() {
Column({ space: 16 }) {
Text('风险预警').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.riskWarning, renderItem: (item: warning.RiskWarning, index: number) => {
Row({ space: 16 }) {
Text(item.warningTime).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(`警告内容:${item.warningContent}`).fontSize(14).textColor('#666666');
Text(`警告级别:${item.warningLevel}`).fontSize(14).textColor('#666666');
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: warning.RiskWarning, index: number) => {
this.handleRiskWarning(item.warningId);
}});
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
RiskWarningUtil.getInstance().init();
this.issueRiskWarning();
}
async issueRiskWarning(): Promise<void> {
this.riskWarning = await RiskWarningUtil.getInstance().issueRiskWarning();
}
async handleRiskWarning(warningId: number): Promise<void> {
const result = await RiskWarningUtil.getInstance().handleRiskWarning(warningId);
if (result.success) {
promptAction.showToast({ message: '风险预警处理成功' });
this.issueRiskWarning();
} else {
promptAction.showToast({ message: '风险预警处理失败' });
}
}
}
合规审计实战
3.1 实战目标
- 合规检查:检查金融产品的合规性;
- 合规审计:审计金融产品的合规性;
- 合规报告:生成金融产品的合规报告。
3.2 合规检查实现
1. 合规检查工具类
entry/src/main/ets/utils/ComplianceCheckUtil.ets
import compliance from '@ohos.compliance';
export class ComplianceCheckUtil {
private static instance: ComplianceCheckUtil | null = null;
private complianceHelper: compliance.ComplianceHelper | null = null;
static getInstance(): ComplianceCheckUtil {
if (!ComplianceCheckUtil.instance) {
ComplianceCheckUtil.instance = new ComplianceCheckUtil();
}
return ComplianceCheckUtil.instance;
}
async init(): Promise<void> {
if (!this.complianceHelper) {
this.complianceHelper = compliance.createComplianceHelper();
}
}
async checkFinancialProductCompliance(productId: number): Promise<compliance.ComplianceCheckResult> {
if (!this.complianceHelper) {
return null;
}
const result = await this.complianceHelper.checkFinancialProductCompliance(productId);
return result;
}
async getFinancialProductComplianceReport(productId: number): Promise<compliance.ComplianceReport> {
if (!this.complianceHelper) {
return null;
}
const result = await this.complianceHelper.getFinancialProductComplianceReport(productId);
return result;
}
}
2. 合规检查应用
entry/src/main/ets/pages/ComplianceCheckPage.ets
import { ComplianceCheckUtil } from '../utils/ComplianceCheckUtil';
@Entry
@Component
struct ComplianceCheckPage {
@State complianceCheckResult: compliance.ComplianceCheckResult | null = null;
@State productId: string = '';
build() {
Column({ space: 16 }) {
Text('合规检查').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
InputComponent({ placeholder: '请输入金融产品 ID', value: '', onChange: (value: string) => {
this.productId = value;
}, type: InputType.Number });
ButtonComponent({ text: '进行合规检查', onClick: async () => {
await this.checkFinancialProductCompliance();
}, disabled: !this.productId });
if (this.complianceCheckResult) {
Text(`合规结果:${this.complianceCheckResult.compliant}`).fontSize(14).textColor('#000000');
Text(`合规得分:${this.complianceCheckResult.complianceScore}`).fontSize(14).textColor('#666666');
Text(`合规描述:${this.complianceCheckResult.complianceDescription}`).fontSize(14).textColor('#666666');
}
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
ComplianceCheckUtil.getInstance().init();
}
async checkFinancialProductCompliance(): Promise<void> {
this.complianceCheckResult = await ComplianceCheckUtil.getInstance().checkFinancialProductCompliance(parseInt(this.productId));
}
}
3.3 合规审计实现
1. 合规审计工具类
entry/src/main/ets/utils/ComplianceAuditUtil.ets
import audit from '@ohos.audit';
export class ComplianceAuditUtil {
private static instance: ComplianceAuditUtil | null = null;
private auditHelper: audit.AuditHelper | null = null;
static getInstance(): ComplianceAuditUtil {
if (!ComplianceAuditUtil.instance) {
ComplianceAuditUtil.instance = new ComplianceAuditUtil();
}
return ComplianceAuditUtil.instance;
}
async init(): Promise<void> {
if (!this.auditHelper) {
this.auditHelper = audit.createAuditHelper();
}
}
async auditFinancialProductCompliance(productId: number): Promise<audit.ComplianceAuditResult> {
if (!this.auditHelper) {
return null;
}
const result = await this.auditHelper.auditFinancialProductCompliance(productId);
return result;
}
async getFinancialProductComplianceAuditReport(productId: number): Promise<audit.ComplianceAuditReport> {
if (!this.auditHelper) {
return null;
}
const result = await this.auditHelper.getFinancialProductComplianceAuditReport(productId);
return result;
}
}
2. 合规审计应用
entry/src/main/ets/pages/ComplianceAuditPage.ets
import { ComplianceAuditUtil } from '../utils/ComplianceAuditUtil';
@Entry
@Component
struct ComplianceAuditPage {
@State complianceAuditResult: audit.ComplianceAuditResult | null = null;
@State productId: string = '';
build() {
Column({ space: 16 }) {
Text('合规审计').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
InputComponent({ placeholder: '请输入金融产品 ID', value: '', onChange: (value: string) => {
this.productId = value;
}, type: InputType.Number });
ButtonComponent({ text: '进行合规审计', onClick: async () => {
await this.auditFinancialProductCompliance();
}, disabled: !this.productId });
if (this.complianceAuditResult) {
Text(`审计结果:${this.complianceAuditResult.auditResult}`).fontSize(14).textColor('#000000');
Text(`审计得分:${this.complianceAuditResult.auditScore}`).fontSize(14).textColor('#666666');
Text(`审计描述:${this.complianceAuditResult.auditDescription}`).fontSize(14).textColor('#666666');
}
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
ComplianceAuditUtil.getInstance().init();
}
async auditFinancialProductCompliance(): Promise<void> {
this.complianceAuditResult = await ComplianceAuditUtil.getInstance().auditFinancialProductCompliance(parseInt(this.productId));
}
}
3.4 合规报告实现
1. 合规报告工具类
entry/src/main/ets/utils/ComplianceReportUtil.ets
import report from '@ohos.report';
export class ComplianceReportUtil {
private static instance: ComplianceReportUtil | null = null;
private reportHelper: report.ReportHelper | null = null;
static getInstance(): ComplianceReportUtil {
if (!ComplianceReportUtil.instance) {
ComplianceReportUtil.instance = new ComplianceReportUtil();
}
return ComplianceReportUtil.instance;
}
async init(): Promise<void> {
if (!this.reportHelper) {
this.reportHelper = report.createReportHelper();
}
}
async generateFinancialProductComplianceReport(productId: number): Promise<report.ComplianceReport> {
if (!this.reportHelper) {
return null;
}
const result = await this.reportHelper.generateFinancialProductComplianceReport(productId);
return result;
}
async downloadFinancialProductComplianceReport(productId: number): Promise<report.ComplianceReportDownloadResult> {
if (!this.reportHelper) {
return null;
}
const result = await this.reportHelper.downloadFinancialProductComplianceReport(productId);
return result;
}
}
2. 合规报告应用
entry/src/main/ets/pages/ComplianceReportPage.ets
import { ComplianceReportUtil } from '../utils/ComplianceReportUtil';
@Entry
@Component
struct ComplianceReportPage {
@State complianceReport: report.ComplianceReport | null = null;
@State productId: string = '';
build() {
Column({ space: 16 }) {
Text('合规报告').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
InputComponent({ placeholder: '请输入金融产品 ID', value: '', onChange: (value: string) => {
this.productId = value;
}, type: InputType.Number });
ButtonComponent({ text: '生成合规报告', onClick: async () => {
await this.generateFinancialProductComplianceReport();
}, disabled: !this.productId });
if (this.complianceReport) {
Text(`报告编号:${this.complianceReport.reportNumber}`).fontSize(14).textColor('#000000');
Text(`报告生成时间:${this.complianceReport.reportGenerateTime}`).fontSize(14).textColor('#666666');
Text(`报告内容:${this.complianceReport.reportContent}`).fontSize(14).textColor('#666666');
}
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
ComplianceReportUtil.getInstance().init();
}
async generateFinancialProductComplianceReport(): Promise<void> {
this.complianceReport = await ComplianceReportUtil.getInstance().generateFinancialProductComplianceReport(parseInt(this.productId));
}
}
产品创新实战
4.1 实战目标
- 产品创新:开发新的金融产品;
- 产品优化:优化现有金融产品;
- 产品推广:推广金融产品。
4.2 产品创新实现
1. 产品创新工具类
entry/src/main/ets/utils/ProductInnovationUtil.ets
import innovation from '@ohos.innovation';
export class ProductInnovationUtil {
private static instance: ProductInnovationUtil | null = null;
private innovationHelper: innovation.InnovationHelper | null = null;
static getInstance(): ProductInnovationUtil {
if (!ProductInnovationUtil.instance) {
ProductInnovationUtil.instance = new ProductInnovationUtil();
}
return ProductInnovationUtil.instance;
}
async init(): Promise<void> {
if (!this.innovationHelper) {
this.innovationHelper = innovation.createInnovationHelper();
}
}
async developNewFinancialProduct(productData: innovation.FinancialProductData): Promise<innovation.ProductInnovationResult> {
if (!this.innovationHelper) {
return null;
}
const result = await this.innovationHelper.developNewFinancialProduct(productData);
return result;
}
async optimizeExistingFinancialProduct(productId: number, productData: innovation.FinancialProductData): Promise<innovation.ProductInnovationResult> {
if (!this.innovationHelper) {
return null;
}
const result = await this.innovationHelper.optimizeExistingFinancialProduct(productId, productData);
return result;
}
}
2. 产品创新应用
entry/src/main/ets/pages/ProductInnovationPage.ets
import { ProductInnovationUtil } from '../utils/ProductInnovationUtil';
@Entry
@Component
struct ProductInnovationPage {
@State productData: innovation.FinancialProductData = {
productName: '',
productDescription: '',
expectedReturnRate: 0,
riskLevel: '',
minimumInvestment: 0
};
build() {
Column({ space: 16 }) {
Text('产品创新').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
InputComponent({ placeholder: '请输入产品名称', value: this.productData.productName, onChange: (value: string) => {
this.productData.productName = value;
}, type: InputType.Normal });
InputComponent({ placeholder: '请输入产品描述', value: this.productData.productDescription, onChange: (value: string) => {
this.productData.productDescription = value;
}, type: InputType.MultiLine });
InputComponent({ placeholder: '请输入预期收益率', value: `${this.productData.expectedReturnRate}`, onChange: (value: string) => {
this.productData.expectedReturnRate = parseFloat(value);
}, type: InputType.Number });
InputComponent({ placeholder: '请输入风险等级', value: this.productData.riskLevel, onChange: (value: string) => {
this.productData.riskLevel = value;
}, type: InputType.Normal });
InputComponent({ placeholder: '请输入最低投资金额', value: `${this.productData.minimumInvestment}`, onChange: (value: string) => {
this.productData.minimumInvestment = parseFloat(value);
}, type: InputType.Number });
ButtonComponent({ text: '开发新产品', onClick: async () => {
await this.developNewFinancialProduct();
}, disabled: !this.productData.productName || !this.productData.productDescription });
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
ProductInnovationUtil.getInstance().init();
}
async developNewFinancialProduct(): Promise<void> {
const result = await ProductInnovationUtil.getInstance().developNewFinancialProduct(this.productData);
if (result.success) {
promptAction.showToast({ message: '产品开发成功' });
this.productData = {
productName: '',
productDescription: '',
expectedReturnRate: 0,
riskLevel: '',
minimumInvestment: 0
};
} else {
promptAction.showToast({ message: '产品开发失败' });
}
}
}
4.3 产品优化实现
1. 产品优化工具类
entry/src/main/ets/utils/ProductOptimizationUtil.ets
import optimization from '@ohos.optimization';
export class ProductOptimizationUtil {
private static instance: ProductOptimizationUtil | null = null;
private optimizationHelper: optimization.OptimizationHelper | null = null;
static getInstance(): ProductOptimizationUtil {
if (!ProductOptimizationUtil.instance) {
ProductOptimizationUtil.instance = new ProductOptimizationUtil();
}
return ProductOptimizationUtil.instance;
}
async init(): Promise<void> {
if (!this.optimizationHelper) {
this.optimizationHelper = optimization.createOptimizationHelper();
}
}
async optimizeExistingFinancialProduct(productId: number, productData: optimization.FinancialProductData): Promise<optimization.ProductOptimizationResult> {
if (!this.optimizationHelper) {
return null;
}
const result = await this.optimizationHelper.optimizeExistingFinancialProduct(productId, productData);
return result;
}
async analyzeFinancialProductOptimizationSuggestions(productId: number): Promise<Array<optimization.ProductOptimizationSuggestion>> {
if (!this.optimizationHelper) {
return [];
}
const result = await this.optimizationHelper.analyzeFinancialProductOptimizationSuggestions(productId);
return result;
}
}
4.4 产品推广实现
1. 产品推广工具类
entry/src/main/ets/utils/ProductPromotionUtil.ets
import promotion from '@ohos.promotion';
export class ProductPromotionUtil {
private static instance: ProductPromotionUtil | null = null;
private promotionHelper: promotion.PromotionHelper | null = null;
static getInstance(): ProductPromotionUtil {
if (!ProductPromotionUtil.instance) {
ProductPromotionUtil.instance = new ProductPromotionUtil();
}
return ProductPromotionUtil.instance;
}
async init(): Promise<void> {
if (!this.promotionHelper) {
this.promotionHelper = promotion.createPromotionHelper();
}
}
async promoteFinancialProduct(productId: number): Promise<promotion.ProductPromotionResult> {
if (!this.promotionHelper) {
return null;
}
const result = await this.promotionHelper.promoteFinancialProduct(productId);
return result;
}
async getFinancialProductPromotionReport(productId: number): Promise<promotion.ProductPromotionReport> {
if (!this.promotionHelper) {
return null;
}
const result = await this.promotionHelper.getFinancialProductPromotionReport(productId);
return result;
}
}
项目配置与部署
5.1 配置文件修改
在 entry/src/main/module.json5 中添加风险控制、合规审计、产品创新配置:
{
"module": {
"requestPermissions": [],
"abilities": [],
"widgets": [],
"pages": []
}
}
5.2 项目部署
- 编译项目:在 DevEco Studio 中点击「Build」→「Build HAP」,编译项目。
- 部署到设备:将编译后的 HAP 文件部署到鸿蒙设备上。
- 测试金融理财项目:
- 在应用中查看风险评估的效果;
- 在应用中查看风险监控的效果;
- 在应用中查看风险预警的效果;
- 在应用中查看合规检查的效果;
- 在应用中查看合规审计的效果;
- 在应用中查看合规报告的效果;
- 在应用中查看产品创新的效果;
- 在应用中查看产品优化的效果;
- 在应用中查看产品推广的效果。
总结
本文完成了鸿蒙金融理财项目的风险控制设计与实现,包括风险评估、监控及预警功能。实现了合规检查、审计及报告生成模块,并支持新产品的开发与优化推广。通过 ArkTS 语言封装工具类与页面交互逻辑,确保金融场景下的安全性与合规性。
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online