UNPKG

@lx-frontend/multi-track

Version:

sls 日志上传功能,当前支持小程序、web

90 lines 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.maskFieldInJsonStr = maskFieldInJsonStr; function has(obj, path) { if (!obj || typeof path !== 'string') return false; var keys = path.split('.'); var current = obj; for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; if (current == null || !(key in current)) { return false; } current = current[key]; } return true; } function set(obj, path, value) { if (!obj || typeof path !== 'string') return; var keys = path.split('.'); var current = obj; for (var i = 0; i < keys.length - 1; i++) { var key = keys[i]; if (!(key in current) || typeof current[key] !== 'object' || current[key] === null) { // 判断下一个 key 是不是数字,决定是数组还是对象 var nextKey = keys[i + 1]; current[key] = /^\d+$/.test(nextKey) ? [] : {}; } current = current[key]; } current[keys[keys.length - 1]] = value; } function isObject(val) { return val !== null && typeof val === 'object'; } /** * 将 JSON 字符串中的指定 keyPath 替换成 maskValue,其他内容不变 * @param jsonStr 原始 JSON 字符串 * @param keyPaths 点分路径字符串,如 ["xxx.token", "xxx.mobile"] * @param maskValue 替换值,默认是 "hidden" * @returns 替换后的 JSON 字符串 * * @example * // 简单对象中隐藏字段 * maskFieldInJsonStr('{"name":"John","token":"secret123"}', ['token']) * // => '{"name":"John","token":"hidden"}' * * // 嵌套对象中隐藏多个字段 * maskFieldInJsonStr( * '{"user":{"name":"John","token":"secret123","contact":{"mobile":"13800138000"}}}', * ['user.token', 'user.contact.mobile'] * ) * // => '{"user":{"name":"John","token":"hidden","contact":{"mobile":"hidden"}}}' * * // 数组对象中隐藏字段 * maskFieldInJsonStr( * '{"users":[{"name":"John","token":"secret1"},{"name":"Jane","token":"secret2"}]}', * ['users.0.token', 'users.1.token'] * ) * // => '{"users":[{"name":"John","token":"hidden"},{"name":"Jane","token":"hidden"}]}' * * // 复杂嵌套结构中隐藏字段 * maskFieldInJsonStr( * '{"data":{"users":[{"id":1,"token":"secret1","profile":{"mobile":"13800138000"}},{"id":2,"token":"secret2"}]}}', * ['data.users.0.token', 'data.users.0.profile.mobile', 'data.users.1.token'] * ) * // => '{"data":{"users":[{"id":1,"token":"hidden","profile":{"mobile":"hidden"}},{"id":2,"token":"hidden"}]}}' */ function maskFieldInJsonStr(jsonStr, keyPaths, maskValue) { if (maskValue === void 0) { maskValue = 'hidden'; } try { var obj_1 = JSON.parse(jsonStr); // 判断 obj 是否为对象 if (!isObject(obj_1)) { return jsonStr; } // 隐藏字段 keyPaths.forEach(function (keyPath) { if (has(obj_1, keyPath)) { set(obj_1, keyPath, maskValue); } }); return JSON.stringify(obj_1); } catch (_err) { return jsonStr; } } //# sourceMappingURL=maskFieldInJsonStr.js.map