如何删除嵌套的 JSON.stringify() 属性
How to remove nested JSON.stringify() properties
我正在尝试使用 Typescript 修改字符串。该字符串由 JSON.stringify() 方法创建。
我想删除属性 "id"、"lightStatus" 和 "value" "inputPort" 和 "outputPort" 的属性。 (我只需要他们的属性"id"。)
console.log(JSON.stringify(this.light));
// Results in -> {"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100}
我尝试按以下方式进行,但它无法识别 "inputPort.id" 和 "outputPort.id"。这就是我尝试的结果。
var savedLight = JSON.stringify(this.light, ["name", "inputPort.id", "outputPort.id", "resistance"]);
// Results in -> {"name":"Light Switch","resistance":100}
结果应包括属性 "name"、"inputPort id"、"outputPort id" 和 "resistance"。像这样:
{"name":"Light Switch","inputPort": 2, "outputPort": 2, "resistance":100}
谁能帮我去掉不必要的属性?
您可以传递 "replacer" 函数,该函数 returns 您想要的确切值。
var data = {"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100};
var result = JSON.stringify(data, function(k, v) {
switch (k) {
case "": case "name": case "resistance":
return v
case "inputPort": case "outputPort":
return v.id
default:
return undefined;
}
}, 2)
document.querySelector("pre").textContent = result
<pre></pre>
""
代表顶级对象。为此,"name"
和 "resistance"
,它只是 returns 原始值。
对于"inputPort"
和"outputPort"
它returnsid
属性.
任何其他内容都会得到 undefined
,这意味着它会从结果中省略。
您可以为此使用替换函数。
var obj = {
"id": 1,
"name": "Light Switch",
"lightStatus": true,
"inputPort": {
"id": 2,
"value": 0
},
"outputPort": {
"id": 2,
"value": false
},
"resistance": 100
};
var stringified = JSON.stringify(obj, function(key, val) {
if (key === 'id' || key === 'lightStatus') {
return void(0);
}
if (key === 'inputPort' || key === 'outputPort') {
return val.id;
}
return val;
});
console.log(stringified);
您可以应用JSON.stringify
的Replacer
功能
var data='{"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100}';
var json=JSON.parse(data);
function replacer(i, val) {
switch (i) {
case "": case "name": case "resistance":
return val
case "inputPort": case "outputPort":
return val.id
default:
return undefined;
}
}
console.log(JSON.stringify(json,replacer));
我正在尝试使用 Typescript 修改字符串。该字符串由 JSON.stringify() 方法创建。
我想删除属性 "id"、"lightStatus" 和 "value" "inputPort" 和 "outputPort" 的属性。 (我只需要他们的属性"id"。)
console.log(JSON.stringify(this.light));
// Results in -> {"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100}
我尝试按以下方式进行,但它无法识别 "inputPort.id" 和 "outputPort.id"。这就是我尝试的结果。
var savedLight = JSON.stringify(this.light, ["name", "inputPort.id", "outputPort.id", "resistance"]);
// Results in -> {"name":"Light Switch","resistance":100}
结果应包括属性 "name"、"inputPort id"、"outputPort id" 和 "resistance"。像这样:
{"name":"Light Switch","inputPort": 2, "outputPort": 2, "resistance":100}
谁能帮我去掉不必要的属性?
您可以传递 "replacer" 函数,该函数 returns 您想要的确切值。
var data = {"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100};
var result = JSON.stringify(data, function(k, v) {
switch (k) {
case "": case "name": case "resistance":
return v
case "inputPort": case "outputPort":
return v.id
default:
return undefined;
}
}, 2)
document.querySelector("pre").textContent = result
<pre></pre>
""
代表顶级对象。为此,"name"
和 "resistance"
,它只是 returns 原始值。
对于"inputPort"
和"outputPort"
它returnsid
属性.
任何其他内容都会得到 undefined
,这意味着它会从结果中省略。
您可以为此使用替换函数。
var obj = {
"id": 1,
"name": "Light Switch",
"lightStatus": true,
"inputPort": {
"id": 2,
"value": 0
},
"outputPort": {
"id": 2,
"value": false
},
"resistance": 100
};
var stringified = JSON.stringify(obj, function(key, val) {
if (key === 'id' || key === 'lightStatus') {
return void(0);
}
if (key === 'inputPort' || key === 'outputPort') {
return val.id;
}
return val;
});
console.log(stringified);
您可以应用JSON.stringify
Replacer
功能
var data='{"id":1,"name":"Light Switch","lightStatus":true,"inputPort":{"id":2,"value":0},"outputPort":{"id":2,"value":false},"resistance":100}';
var json=JSON.parse(data);
function replacer(i, val) {
switch (i) {
case "": case "name": case "resistance":
return val
case "inputPort": case "outputPort":
return val.id
default:
return undefined;
}
}
console.log(JSON.stringify(json,replacer));