Skip to content

Commit

Permalink
Skipping blank values at stringify
Browse files Browse the repository at this point in the history
  • Loading branch information
douglira committed Apr 12, 2019
1 parent faeab53 commit 521a4df
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,13 @@ var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true });
assert.equal(nullsSkipped, 'a=b');
```

To completely skip rendering key with `blank` values ('', ' '), use the `skipBlanks` flag:

```javascript
var blanksSkipped = qs.stringify({ a: 'b', c: '', d: ' '}, { skipBlanks: true });
assert.equal(blanksSkipped, 'a=b');
```

If you're communicating with legacy systems, you can switch to `iso-8859-1`
using the `charset` option:

Expand Down
14 changes: 14 additions & 0 deletions dist/qs.js
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@ var defaults = {
serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching
return toISO.call(date);
},
skipBlanks: false,
skipNulls: false,
strictNullHandling: false
};
Expand All @@ -308,6 +309,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
prefix,
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand Down Expand Up @@ -362,12 +364,17 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
continue;
}

if (skipBlanks && String(obj[key]).trim() === '') {
continue;
}

if (Array.isArray(obj)) {
pushToArray(values, stringify(
obj[key],
generateArrayPrefix(prefix, key),
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand All @@ -384,6 +391,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
prefix + (allowDots ? '.' + key : '[' + key + ']'),
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand All @@ -410,6 +418,7 @@ module.exports = function (object, opts) {

var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
var skipBlanks = typeof options.skipBlanks === 'boolean' ? options.skipBlanks : defaults.skipBlanks;
var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;
Expand Down Expand Up @@ -470,11 +479,16 @@ module.exports = function (object, opts) {
if (skipNulls && obj[key] === null) {
continue;
}

if (skipBlanks && String(obj[key]).trim() === '') {
continue;
}
pushToArray(keys, stringify(
obj[key],
key,
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encode ? encoder : null,
filter,
Expand Down
14 changes: 14 additions & 0 deletions lib/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ var defaults = {
serializeDate: function serializeDate(date) { // eslint-disable-line func-name-matching
return toISO.call(date);
},
skipBlanks: false,
skipNulls: false,
strictNullHandling: false
};
Expand All @@ -51,6 +52,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
prefix,
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand Down Expand Up @@ -107,12 +109,17 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
continue;
}

if (skipBlanks && String(obj[key]).trim() === '') {
continue;
}

if (isArray(obj)) {
pushToArray(values, stringify(
obj[key],
typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix,
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand All @@ -129,6 +136,7 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
prefix + (allowDots ? '.' + key : '[' + key + ']'),
generateArrayPrefix,
strictNullHandling,
skipBlanks,
skipNulls,
encoder,
filter,
Expand Down Expand Up @@ -185,6 +193,7 @@ var normalizeStringifyOptions = function normalizeStringifyOptions(opts) {
filter: filter,
formatter: formatter,
serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,
skipBlanks: typeof opts.skipBlanks === 'boolean' ? opts.skipBlanks : defaults.skipBlanks,
skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,
sort: typeof opts.sort === 'function' ? opts.sort : null,
strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling
Expand Down Expand Up @@ -237,11 +246,16 @@ module.exports = function (object, opts) {
if (options.skipNulls && obj[key] === null) {
continue;
}

if (options.skipBlanks && String(obj[key]).trim() === '') {
continue;
}
pushToArray(keys, stringify(
obj[key],
key,
generateArrayPrefix,
options.strictNullHandling,
options.skipBlanks,
options.skipNulls,
options.encode ? options.encoder : null,
options.filter,
Expand Down
10 changes: 10 additions & 0 deletions test/stringify.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,16 @@ test('stringify()', function (t) {
st.end();
});

t.test('omits blanks when asked', function (st) {
st.equal(qs.stringify({ a: 'b', c: '', d: ' ' }, { skipBlanks: true }), 'a=b');
st.end();
});

t.test('omits nested blanks when asked', function (st) {
st.equal(qs.stringify({ a: { b: 'c', d: '' } }, { skipBlanks: true }), 'a%5Bb%5D=c');
st.end();
});

t.test('omits array indices when asked', function (st) {
st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d');
st.end();
Expand Down

0 comments on commit 521a4df

Please sign in to comment.