SOURCE

function processProductData(jsonString) {
    // 1. 定义必须存在的原始键名列表
    const requiredOriginalKeys = ["品名", "卷轴编码", "宽度", "长度", "重量", "数量"];
    // 2. 定义键名映射关系
    const keyMap = {
        "品名": "name",
        "卷轴编码": "scrollEncoding",
        "宽度": "sizeWidth",
        "长度": "sizeLength",
        "重量": "amount",
        "数量": "productCount"
    };

    let dataArray;
    try {
        // 3. 解析输入的 JSON 字符串为 JavaScript 数组
        dataArray = JSON.parse(jsonString);
        // 确保解析结果是数组
        if (!Array.isArray(dataArray)) {
            throw new Error("Input data is not a valid JSON array.");
        }
    } catch (error) {
        console.error("Error parsing JSON string:", error);
        return JSON.stringify(null); // 解析失败,返回 null 的 JSON 字符串
    }

    // 4. 遍历数组中的每个对象
    const processedArray = dataArray.map(obj => {
        // 确保当前项是对象类型
        if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
            console.warn("Skipping non-object item:", obj);
            return obj; // 如果不是对象,则原样返回
        }

        const currentKeys = Object.keys(obj);

        // 5. 检查条件:对象的键数量是否等于必须键的数量
        let shouldProcess = currentKeys.length === requiredOriginalKeys.length;

        // 6. 检查条件:对象是否包含所有必须的原始键名
        if (shouldProcess) {
            for (const requiredKey of requiredOriginalKeys) {
                if (!obj.hasOwnProperty(requiredKey)) {
                    shouldProcess = false;
                    break; // 只要有一个必须的键不存在,就停止检查,不处理该对象
                }
            }
        }

        // 7. 如果条件满足 ("有且仅有" 这些键),则进行键名转换
        if (shouldProcess) {
            const newObj = {};
            for (const originalKey in obj) {
                // 使用映射关系找到新的键名
                const newKey = keyMap[originalKey];
                // 将值赋给新对象的新键
                newObj[newKey] = obj[originalKey];
            }
            return newObj; // 返回转换后的新对象
        } else {
            // 8. 如果条件不满足,则原样返回该对象
            return {};
        }
    });

    // 9. 返回处理后的整个数组的 JSON 字符串
    return JSON.stringify(processedArray);
}


let data = "[{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0124B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-B0324B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":433.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0222B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0324B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0224B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C02-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C01-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316B01-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A03-B0124B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A05-B0324B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A03-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A05-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A04-B0222B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A04-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A02-C0124C0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250222A02-C0122C0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250223B02-C0324C0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250223B03-C0124C0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-C0222C0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-C0122C0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0122B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C02-B0322B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0224B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0222B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316B01-B0124B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0324B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250223B03-C0114C0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250223B02-C0314C0\",\"宽度\":1005,\"长度\":4100,\"重量\":435.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-C0223C0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-C0123C0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0123B0\",\"宽度\":1005,\"长度\":4100,\"重量\":433.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C03-B0323B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0323B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250315C02-B0223B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C01-B0223B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C01-B0123B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C02-B0123B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C01-B0323B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0123B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C02-B0323B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0223B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C02-B0223B0\",\"宽度\":1005,\"长度\":4100,\"重量\":434.3,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316B01-B0123B0\",\"宽度\":1005,\"长度\":4100,\"重量\":433.8,\"数量\":1},{\"品名\":\"XXX\",\"卷轴编码\":\"YG250316C04-B0323B0\",\"宽度\":1005,\"长度\":4100,\"重量\":433.8,\"数量\":1}]"

console.log(processProductData(data))
console 命令行工具 X clear

                    
>
console