鸿蒙Next开发中如何实现JSON序列化及下划线与驼峰命名转换
在鸿蒙Next开发中,如何实现JSON数据的序列化和反序列化?特别是需要处理下划线命名与驼峰命名转换时,有没有推荐的库或原生API可以使用?例如,将Java对象转为JSON时自动将userName转为user_name,或者反向解析时能正确映射字段。希望能提供具体代码示例和最佳实践方案。
2 回复
鸿蒙Next里用@ohos.util的JSON.stringify()搞定序列化。下划线转驼峰?自己写个遍历函数,匹配_后字母大写就行。反着来就驼峰转下划线,遇到大写前插_并转小写。简单粗暴,代码量不到十行,稳!
更多关于鸿蒙Next开发中如何实现JSON序列化及下划线与驼峰命名转换的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS Next)中,可通过以下方式实现JSON序列化及下划线与驼峰命名转换:
1. JSON序列化
使用@ohos.util和@ohos.file.fs模块处理JSON数据:
import util from '@ohos.util';
import fs from '@ohos.file.fs';
// 对象转JSON字符串
let obj = { name: "张三", age: 25 };
let jsonStr = JSON.stringify(obj);
// JSON字符串转对象
let newObj = JSON.parse(jsonStr);
// 写入文件
let filePath = "xxx/test.json";
fs.writeTextSync(filePath, jsonStr);
2. 命名转换
方案一:手动转换函数
// 驼峰转下划线
function camelToSnake(obj: any): any {
if (typeof obj !== 'object') return obj;
return Object.keys(obj).reduce((acc, key) => {
const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();
acc[snakeKey] = camelToSnake(obj[key]);
return acc;
}, {});
}
// 下划线转驼峰
function snakeToCamel(obj: any): any {
if (typeof obj !== 'object') return obj;
return Object.keys(obj).reduce((acc, key) => {
const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
acc[camelKey] = snakeToCamel(obj[key]);
return acc;
}, {});
}
// 使用示例
const user = { userName: "LiHua", birthDate: "2000-01-01" };
const snakeUser = camelToSnake(user); // {user_name: "LiHua", birth_date: "2000-01-01"}
方案二:使用第三方库
在package.json中添加依赖:
{
"dependencies": {
"lodash": "^4.17.21"
}
}
使用示例:
import { camelCase, snakeCase } from 'lodash';
// 对象键名批量转换
function convertKeys(obj: any, converter: (key: string) => string): any {
return Object.keys(obj).reduce((acc, key) => {
acc[converter(key)] = obj[key];
return acc;
}, {});
}
const data = { user_name: "LiHua", birth_date: "2000-01-01" };
const camelData = convertKeys(data, camelCase); // {userName: "LiHua", birthDate: "2000-01-01"}
3. 完整流程示例
// 接口返回下划线数据 → 转驼峰 → 业务处理 → 转下划线 → 发送给服务端
const apiResponse = '{"user_name":"LiHua","order_list":[]}';
// JSON反序列化
const data = JSON.parse(apiResponse);
// 下划线转驼峰
const camelData = snakeToCamel(data);
// 业务处理...
camelData.userName = "WangWei";
// 驼峰转下划线
const finalData = camelToSnake(camelData);
// 序列化发送
const requestBody = JSON.stringify(finalData);
注意事项:
- 递归函数需处理数组和null的情况
- 考虑循环引用问题(可引入WeakMap解决)
- 重要数据建议编写单元测试
- 第三方库需检查鸿蒙兼容性
以上方案可根据具体业务需求选择实现方式,简单场景建议手动实现,复杂项目可使用成熟的工具库。

