【问题标题】:JSON stringify replacer ignore empty objectsJSON字符串化替换器忽略空对象
【发布时间】:2019-03-21 09:55:47
【问题描述】:

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

谢谢

【问题讨论】:

标签: javascript json angular typescript


【解决方案1】:

我遇到了一个类似的问题,接受的答案给了我一个很好的起点,但我需要一些更强大的东西来处理具有深度嵌套键的动态结构。

这是我想出的,认为与遇到此问题的其他人分享可能会有所帮助:

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

【讨论】:

    【解决方案2】:

    您可以使用替换器并检查值是否为数组以及项目是否为空对象。

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2012-08-08
      相关资源
      最近更新 更多