当前位置: 首页 > 知识库问答 >
问题:

JSON stringify替换程序忽略空对象

寇和璧
2023-03-14

我想Stringify我的json,但我想排除空嵌套数组的对象。

我的json看起来像这样:

{
  "Fe": {
    "Fh": {
        "a" : 1,
        "b" : "foo"
      },
      "Fb": {
          "Dbs": [
                  {
                    "Nl": "1",
                    "Dt": "red",
                  }
                 ],
          "Dr": [
                  {
                  }
               ]
        }
}

我想忽略“博士”,因为它是空的。

如何在typescript/Javascript中实现它?

这里是我尝试过的代码:

const str = JSON.stringify(this.json, replacer);

replacer(key, value) {
		if (value === null || value === {})
			return undefined;
		else
			return value;
	};

谢谢

共有2个答案

邬弘化
2023-03-14

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

以下是我的想法,我想这可能会有助于其他遇到这个问题的人分享:

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);
}
宇文金鑫
2023-03-14

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

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);
 类似资料:
  • 我想将包含另一个空值POJO的POJO序列化为JSON。 例如,给定: 连载之后,它看起来会是这样的 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局适用于每个对象,而无需编写自定义代码。

  • 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局地用于每个对象,而无需编写自定义代码。

  • 问题内容: 给定一个文件: 致电时,我获得: 换句话说,这不是正确的排序,它会删除/忽略空格!我希望这是它的行为,但是无论是否带有标志,它都会发生。 我想获得“正确”的排序: 我应该怎么做? 问题答案: 解决者: 从文档中: 警告:环境指定的语言环境会影响排序顺序。设置LC_ALL = C可获得使用本机字节值的传统排序顺序。 (至少适用于ASCII,不适用于UTF8)

  • 我的控制器接收到的JSON数据如下: 问题是对象“ContainedObject”被解释为是,并且它正在被实例化。因此,只要我的控制器读取这个JSON数据,它就会生成一个ContainedObject对象类型的实例,但我需要它为空。 最简单、最快的解决方案是,在接收的JSON数据中,该值为空,如下所示: 我的实体类如下: 和包含的对象类,如下所示:

  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 测试数据准备 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ // 写入测试数据 $filePath = $excel->f

  • 问题内容: 我目前正在使用杰克逊2.1.4,并且在将对象转换为JSON字符串时忽略字段时遇到了一些麻烦。 这是我的类,它充当要转换的对象: 这是我如何转换它: 这是输出: 如何避免这些空值?我只想获取“订阅”目的所需的信息! 这正是我要查找的输出: 我还尝试了@JsonInclude(Include.NON_NULL)并将所有变量都设置为null,但是它也不起作用!感谢您的帮助! 问题答案: 您将