Skip to content

Prevent Replace allowEmptyReplacement from creating duplicate keys #175

@cmtk

Description

@cmtk

This is ether expected behavior or a bug, depending on my (mis)understanding of the allowEmptyReplacement flag in the FilterBase documentation.

When using replace to remove an element with allowEmptyReplacement: true, the remaining json keys seem to be duplicated. allowEmptyReplacement: false (default) does not do this.

Here's a quick and dirty sample.
I am attempting to remove the Results element entirely (this applies to Ignore as well).

const { Readable } = require('stream')
const { parser } = require('stream-json/Parser');
const { replace } = require('stream-json/filters/Replace');
const { stringer } = require('stream-json/Stringer');

const sample = {
    StatusCode: 200,
    StatusMessage: "Success",
    Results: "test"
}

const s = new Readable.from([JSON.stringify(sample)])

const pipeline = s.pipe(parser())
    .pipe(replace({ filter: 'Results', replacement: [], allowEmptyReplacement: true }))
    .pipe(stringer())
    .pipe(process.stdout)

allowEmptyReplacement: true result - unexpected:

{
  "StatusCode":200,
  "StatusCode":,
  "StatusMessage":"Success",
  "StatusMessage":
}

allowEmptyReplacement: false result - as expected:

{
  "StatusCode":200,
  "StatusMessage":"Success",
  "Results":null
}

Desired result:

{
  "StatusCode":200,
  "StatusMessage":"Success"
}

If expected, how can I avoid duplicating the keys?

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions