【问题标题】:JSON Stringfy only a few propertiesJSON Stringify 只有几个属性
【发布时间】:2019-07-22 03:22:27
【问题描述】:

我有这个对象:

{
    name: "",            
    email: "",
    phone: "",
    protocol: "",
    area: "",
    subject: "",
    message: "",
    validation: this.validator.valid()
}

我想将其转换为 JSON,但我不想在其上添加 validation 属性。

我已经尝试了以下方法:

const test = JSON.stringify(this.state);
delete test.validation;

还有其他方法吗?

【问题讨论】:

标签: javascript json


【解决方案1】:

JSON.stringify 接受您可以使用的替换回调。 replacer 函数将键 k 和值 v 字符串化为参数。返回 undefined 会产生最终结果中不包含 key 的效果:

state = {
    name: "",            
    email: "",
    phone: "",
    protocol: "",
    area: "",
    subject: "",
    message: "",
    validation: "some val"
}

const test = JSON.stringify(state, (k, v) => k != 'validation' ? v : undefined);

console.log(test)

注意:像这样使用它也会从任何子对象中删除 validation 键,这可能是也可能不是您想要的。

【讨论】:

  • 谢谢,伙计!我找到了答案,因为你的帖子。我已经用我的解决方案更新了这个问题:你怎么看?有什么问题吗?我对这一切都是全新的;)
  • 请您为未来的读者推断kv的含义
  • 当然@Webwoman,我添加了一些额外的文字来解释它。希望对您有所帮助。
【解决方案2】:

它会起作用的。

const { validation, ...rest } = this.state;
JSON.stringify(rest);

【讨论】:

    【解决方案3】:

    更新 - 我找到了不同的解决方案

    其实很简单。我发现了解决方案here。 以下几行解决了我的问题:

    const formSubmit = JSON.stringify(this.state, ['name', 'email', 'phone', 'protocol','area','subject', 'message']);
    

    【讨论】:

      【解决方案4】:

      如果你放一个 undefined,JSON.stringify 会跳过它:

      const yourState = {
              name: "",            
              email: "",
              phone: "",
              protocol: "",
              area: "",
              subject: "",
              message: "",
              validation: true,
          }
      
      const copy = {
        ...yourState,
        validation: undefined,
      };
      console.log(JSON.stringify(copy));
      

      此外,您不能从 JSON.stringify 中执行删除,因为它是字符串而非对象文字。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-25
        • 2016-02-19
        • 1970-01-01
        • 2013-01-21
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多