如何删除嵌套的JSON.stringify()属性

时间:2017-04-01 14:29:44

标签: javascript json typescript stringify

我试图用Typescript修改字符串。该字符串由 JSON.stringify()方法创建。

我想删除属性" id" " lightStatus" "值& " inputPort" " outputPort" 的#34; 属性。 (我只需要他们的属性" 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"和"抵抗" 。像这样:

{"name":"Light Switch","inputPort": 2, "outputPort": 2, "resistance":100}

任何人都可以帮助我摆脱不必要的财产吗?

3 个答案:

答案 0 :(得分:2)

您可以传递一个“replacer”函数,它返回您想要的确切值。

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,这意味着它会从结果中省略。

答案 1 :(得分:1)

您可以使用替换器功能。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以应用Replacer

JSON.stringify功能
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));