如何删除嵌套的 JSON.stringify() 属性
Posted
技术标签:
【中文标题】如何删除嵌套的 JSON.stringify() 属性【英文标题】:How to remove nested JSON.stringify() properties 【发布时间】:2017-08-26 18:05:38 【问题描述】:我正在尝试使用 Typescript 修改字符串。该字符串由 JSON.stringify() 方法创建。
我想删除 "inputPort" 的属性 "id"、"lightStatus" 和 "value" 属性 和 “输出端口”。 (我只需要他们的属性“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
谁能帮助我如何摆脱不必要的属性?
【问题讨论】:
什么是预期的 json 数据以及您从响应中得到什么。更新清楚。 @Aravind 我添加了预期的输出。到目前为止我得到的结果不包括我想要的“inputPort”和“outputPort”。 【参考方案1】:您可以传递一个“替换器”函数来返回您想要的确切值。
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"
,它只是返回原始值。
对于"inputPort"
和"outputPort"
,它返回id
属性。
其他任何东西都会得到undefined
,这意味着它会从结果中被忽略。
【讨论】:
【参考方案2】:您可以为此使用替换函数。
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);
【讨论】:
【参考方案3】:你可以申请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));
【讨论】:
以上是关于如何删除嵌套的 JSON.stringify() 属性的主要内容,如果未能解决你的问题,请参考以下文章
JSON Stringify 忽略 Redis 发布上的嵌套对象