2017-04-01 6 views
0

Typescript로 문자열을 수정하려고합니다. 문자열은 JSON.stringify() 메서드에 의해 만들어집니다.중첩 JSON.stringify() 속성을 제거하는 방법

나는 속성 "ID", "lightStatus""inputPort""outputPort""값" 속성을 제거 할. (I는 자신의 속성 "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 아이디"와 "저항"을 포함해야한다. 이와 같이 :

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

불필요한 속성을 제거하는 방법을 알려줄 수있는 사람이 있습니까?

+0

의 기능과 당신이 응답에서 얻을 적용 할 수 있습니다. 명확하게 업데이트하십시오. – Aravind

+0

@Aravind 예상 출력을 추가했습니다. 지금까지 얻은 결과에는 "inputPort"와 "outputPort"가 포함되어 있지 않았습니다. – 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

당신은 Replacer 예상 JSON 데이터 무엇 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));