如何为 JSON stringify 应用自定义格式?
How to apply custom formatting for a JSON stringify?
我有以下代码:
const sample = [
{
name: "apple",
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
age: 24
},
{
name: "banana",
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
age: 45
}
];
const qwer = JSON.stringify(sample, null, 2);
console.log(qwer);
如果你 运行 它,你会注意到它的格式很好,除了点数组,它非常冗长。
我希望一切都像往常一样缩进(这就是为什么我将 2 作为最后一个参数传递给字符串化),但我希望点数组只占用一行,就像它是这样的在代码中声明。
这是因为目前每个点数组都被拉伸到 18 行,而那时只有 3 或 4 个项目。我希望他们保持在一条线上。
我尝试使用自定义替换器,虽然它有点管用,但它强制 JSON 数组成为一个字符串。但它不是一个字符串。我希望它保持一个数组。
有什么办法吗?
对于一般解决方案,迷你解析器将是最好的方法,但一种快速但 ugly-looking 的方法是使用替换器将数组替换为具有唯一值的字符串化字符串 作为前缀,之后可以替换。
const sample = [
{
name: "apple",
age: 24,
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
},
{
name: "banana",
age: 45,
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
}
];
const withNestedStringifiedArrays = JSON.stringify(
sample,
(key, value) => key && Array.isArray(value) ? '@@UNIQUE@@' + JSON.stringify(value) : value,
2
);
const output = withNestedStringifiedArrays.replace(
/"@@UNIQUE@@(.*?)"(,)?$/gm,
(_, stringifiedArr, possibleComma = '') => stringifiedArr.replaceAll('\', '') + possibleComma
);
console.log(output);
我有以下代码:
const sample = [
{
name: "apple",
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
age: 24
},
{
name: "banana",
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
age: 45
}
];
const qwer = JSON.stringify(sample, null, 2);
console.log(qwer);
如果你 运行 它,你会注意到它的格式很好,除了点数组,它非常冗长。
我希望一切都像往常一样缩进(这就是为什么我将 2 作为最后一个参数传递给字符串化),但我希望点数组只占用一行,就像它是这样的在代码中声明。
这是因为目前每个点数组都被拉伸到 18 行,而那时只有 3 或 4 个项目。我希望他们保持在一条线上。
我尝试使用自定义替换器,虽然它有点管用,但它强制 JSON 数组成为一个字符串。但它不是一个字符串。我希望它保持一个数组。
有什么办法吗?
对于一般解决方案,迷你解析器将是最好的方法,但一种快速但 ugly-looking 的方法是使用替换器将数组替换为具有唯一值的字符串化字符串 作为前缀,之后可以替换。
const sample = [
{
name: "apple",
age: 24,
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
},
{
name: "banana",
age: 45,
points: [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 }, { x: 7, y: 8 } ],
}
];
const withNestedStringifiedArrays = JSON.stringify(
sample,
(key, value) => key && Array.isArray(value) ? '@@UNIQUE@@' + JSON.stringify(value) : value,
2
);
const output = withNestedStringifiedArrays.replace(
/"@@UNIQUE@@(.*?)"(,)?$/gm,
(_, stringifiedArr, possibleComma = '') => stringifiedArr.replaceAll('\', '') + possibleComma
);
console.log(output);