如何删除嵌套的 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.stringifyReplacer功能

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 发布上的嵌套对象

如何 JSON.stringify 对象数组

json.stringify 对象并重命名 json 中的变量

JSON.stringify()执行出错是如何产生的?

如何提升JSON.stringify()的性能?

如何正确使用 JSON.stringify 和 json_decode()