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