JSON Stringify Replacer忽略空对象

时间:2018-10-16 19:24:06

标签: javascript json angular typescript

我想对我的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;
	};

谢谢

2 个答案:

答案 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);
}