我想对我的json进行字符串化,但是我想排除对象的空嵌套数组。
我的json看起来有点:
{
"Fe": {
"Fh": {
"a" : 1,
"b" : "foo"
},
"Fb": {
"Dbs": [
{
"Nl": "1",
"Dt": "red",
}
],
"Dr": [
{
}
]
}
}
我想忽略“博士”,因为它是空的。
如何在打字稿/ Javascript中完成呢?
这里是我尝试过的代码:
const str = JSON.stringify(this.json, replacer);
replacer(key, value) {
if (value === null || value === {})
return undefined;
else
return value;
};
谢谢
答案 0 :(得分:0)
您可以使用替换器并检查该值是否为数组,以及项目是否为空对象。
var object = { Fe: { Fh: { a: 1, b: "foo" }, Fb: { Dbs: [{ Nl: "1", Dt: "red" }], Dr: [{}] } } },
json = JSON.stringify(
object,
(k, v) => Array.isArray(v) && v.every(o => JSON.stringify(o) === '{}')
? undefined
: v
);
console.log(json);
答案 1 :(得分:0)
我遇到了类似的问题,被接受的答案为我提供了一个很好的起点,但是我需要更强大的功能来处理具有深层嵌套键的动态结构。
这就是我的想法,认为与遇到此问题的其他人分享可能会有所帮助:
function isEmpty(value) {
if (value === null || value === undefined) {
return true;
}
if (Array.isArray(value)) {
return value.every(isEmpty);
}
else if (typeof (value) === 'object') {
return Object.values(value).every(isEmpty);
}
return false;
}
function replacer(key, value) {
return isEmpty(value)
? undefined
: value;
}
function getPrettyJSON(obj: any) {
return JSON.stringify(obj, replacer, 2);
}