2017-04-01 163 views
0

我試圖用Typescript修改字符串。該字符串由JSON.stringify()方法創建。如何刪除嵌套的JSON.stringify()屬性

我想刪除的屬性「ID」「lightStatus」「價值」「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} 

結果應該包含屬性「名」,「inputPort ID」,「outputPort id」和「抵抗」。像這樣:

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

任何人都可以幫助我如何擺脫不必要的屬性?

+0

Replacer功能什麼是預期的JSON數據,你從響應得到什麼。更新清楚。 – Aravind

+0

@Aravind我添加了預期的輸出。到目前爲止,我得到的結果不包括「輸入端口」和「輸出端口」,這是我想要的。 – BRsmover

回答

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": 
 
    \t return v 
 
    case "inputPort": case "outputPort": 
 
    \t return v.id 
 
    default: 
 
    \t return undefined; 
 
    } 
 
}, 2) 
 

 
document.querySelector("pre").textContent = result
<pre></pre>

""表示頂層對象。爲此,"name""resistance",它只是返回原始值。

對於"inputPort""outputPort"它返回id屬性。

還有其他的獲得undefined,這意味着它從結果中被省略。

1

您可以使用替代功能。

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);

1

你可以申請的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));