You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.7 KiB

7 days ago
// 定位「默认带入当前商机团队」所在字段的路径
import fs from 'node:fs';
const raw = fs.readFileSync('e:/code/crm-backend-matt/.scratch/lanhu-latest/team-page-data.js', 'utf8');
const start = raw.indexOf('{');
let depth = 0, end = -1, inStr = false, esc = false;
for (let i = start; i < raw.length; i++) {
const c = raw[i];
if (esc) { esc = false; continue; }
if (c === '\\') { esc = true; continue; }
if (c === '"') inStr = !inStr;
if (inStr) continue;
if (c === '{') depth++;
else if (c === '}') { depth--; if (depth === 0) { end = i; break; } }
}
const data = JSON.parse(raw.slice(start, end + 1));
const needle = '默认带入当前商机团队';
const hits = [];
function find(obj, path) {
if (obj === null || typeof obj !== 'object') return;
if (Array.isArray(obj)) { obj.forEach((v, i) => find(v, `${path}[${i}]`)); return; }
for (const [k, v] of Object.entries(obj)) {
if (typeof v === 'string' && v.includes(needle)) hits.push({ path: `${path}.${k}`, val: v.slice(0, 300) });
else if (v && typeof v === 'object') find(v, `${path}.${k}`);
}
}
find(data, '$');
for (const h of hits) console.log(h.path, '\n →', h.val, '\n');
// 顺带统计所有「值像正文」的字符串键分布
const keyStats = {};
function stat(obj) {
if (obj === null || typeof obj !== 'object') return;
if (Array.isArray(obj)) { obj.forEach(stat); return; }
for (const [k, v] of Object.entries(obj)) {
if (typeof v === 'string' && /[\u4e00-\u9fa5]{2,}/.test(v) && !v.startsWith('images/')) {
keyStats[k] = (keyStats[k] || 0) + 1;
} else if (v && typeof v === 'object') stat(v);
}
}
stat(data);
console.log('中文值键分布:', JSON.stringify(keyStats, null, 2));