javascript - hur man på ett snyggt sätt hanterar undefined-värden med en yaml-dump (js-yaml)
Använder JS-YAML men detta gäller förmodligen andra YAML i/o-bibliotek.
Jag dump ar ett objekt, och fält utan värden blir så här:
fieldName: !<tag:yaml.org,2002:js/undefined> ''hur kan jag undertrycka det till antingen undefined eller bara hoppa över det som JSON.stringify? Jag antar att det jag vill är att serialisera något som kan tolkas igen senare, så jag är inte säker på vilket värde. undefined verkar fungera för mig med denna TypeScript-definition
Jag provade några alternativ från safeDump
const blob = yaml.dump(obj, { skipInvalid: true, lineWidth: 200 })https://github.com/nodeca/js-yaml#safedump-object---options-
men utan framgång. Jag antar att jag kan ta bort de odefinierade fälten, men jag skulle behöva göra en djup rensning av hela objektet... också kontrollera för false vs undefined osv. osv.
Jag försökte detta men det hade ingen effekt: const clean={ ...obj }/ta bort nuller?
Visst måste det finnas ett trevligare sätt att hantera detta med js-yaml? Måste jag definiera mitt eget schema?
relaterat: https://github.com/nodeca/js-yaml/issues/456 https://stackoverflow.com/a/38340374/1146785
async debugMessage(obj) {
console.log('json', JSON.stringify(obj, null, 2))
const blob = yaml.dump(obj)
console.log('yaml', blob)
}
// json
{
"msg": "router",
"input": "sleep",
"eventType": "action",
"handled": {
"handled": true,
"doc": {
"match": "^cont|.*",
"goto": "prologue"
},
"klass": "room",
"history": [
"goto"
]
}
}
// yaml
msg: router
input: sleep
eventType: action
parsed: !<tag:yaml.org,2002:js/undefined> ''
handled:
handled: true
doc:
match: ^cont|.*
goto: prologue
klass: room
history:
- goto
