JSON Stringfy只有一些属性

时间:2019-05-10 16:39:59

标签: javascript json

我有这个JS对象:

.header img{
    height:Auto;
    left:0;
    margin:0;
    padding:0;
    position:absolute;
    width:100vw;
    z-index:1;
    }

我想将其转换为JSON,但我不希望它具有this.state = { name: "", email: "", phone: "", protocol: "", area: "", subject: "", message: "", validation: this.validator.valid() } 属性。

我已经尝试了以下方法:

validation: this.validator.valid()

还有其他方法吗?

4 个答案:

答案 0 :(得分:4)

JSON.stringify接受您可以使用的替换回调。替换功能使用键k,值v被字符串化为参数。返回undefined将具有不将键包含在最终结果中的作用:

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键,这可能是您想要的,也可能不是您想要的。

答案 1 :(得分:1)

如果放置未定义,则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中执行删除操作,因为它是一个字符串,而不是对象文字。

答案 2 :(得分:0)

它将起作用。

CART_C

答案 3 :(得分:0)

更新-我找到了其他解决方案

事实上,这非常简单。我发现了解决方法here。 以下几行解决了我的问题:

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