Skip to content
This repository was archived by the owner on Jan 7, 2021. It is now read-only.

Commit 450e10d

Browse files
authored
Merge pull request #163 from Clement134/feature/null-properties
json2xml ignore null properties
2 parents f353724 + 7bb5c1c commit 450e10d

File tree

6 files changed

+43
-9
lines changed

6 files changed

+43
-9
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,13 @@ var chars = {
8585
Default values:
8686
```javascript
8787
var options = {
88-
sanitize: false
88+
sanitize: false,
89+
ignoreNull: false
8990
};
9091
```
9192

92-
`sanitize: false` is the default option to behave like previous versions
93+
* `sanitize: false` is the default option to behave like previous versions
94+
* **ignoreNull:** Ignores all null values
9395

9496

9597
(*) xml2json tranforms CDATA content to JSON, but it doesn't generate a reversible structure.

lib/json2xml.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ module.exports = function (json, options) {
2121
}
2222

2323
ToXml.prototype.parse = function(obj) {
24+
if (!obj) return;
25+
2426
var self = this;
2527
var keys = Object.keys(obj);
2628
var len = keys.length;
@@ -60,7 +62,7 @@ ToXml.prototype.parse = function(obj) {
6062
self.closeTag(key);
6163
}
6264
}
63-
} else if (typeof(obj[key]) == 'object') {
65+
} else if (typeof(obj[key]) == 'object' && !(self.options.ignoreNull && obj[key] === null)) {
6466
self.openTag(key);
6567
self.parse(obj[key]);
6668
self.closeTag(key);
@@ -97,7 +99,8 @@ ToXml.prototype.completeTag = function() {
9799
}
98100
function ToXml(options) {
99101
var defaultOpts = {
100-
sanitize: false
102+
sanitize: false,
103+
ignoreNull: false
101104
};
102105

103106
if (options) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<subObject propertyNotNull="value"></subObject>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<subObject propertyNotNull="value"><propertyNull></propertyNull></subObject>

test/fixtures/null-properties.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"subObject": {"propertyNotNull": "value","propertyNull":null}}

test/test.js

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ describe('xml2json', function () {
220220
var xml = internals.readFixture('alternate-text-node-A.xml');
221221
var result = parser.toJson(xml, {reversible: true});
222222
var json = internals.readFixture('alternate-text-node-A.json');
223-
223+
224224
expect(result).to.equal(json);
225225

226226
done();
@@ -231,13 +231,13 @@ describe('xml2json', function () {
231231
var xml = internals.readFixture('alternate-text-node-A.xml');
232232
var result = parser.toJson(xml, {alternateTextNode: false, reversible: true});
233233
var json = internals.readFixture('alternate-text-node-A.json');
234-
234+
235235
expect(result).to.equal(json);
236236

237237
done();
238238
});
239239

240-
240+
241241
it('B: uses alternate text node with option as true', function(done) {
242242

243243
var xml = internals.readFixture('alternate-text-node-A.xml');
@@ -248,13 +248,13 @@ describe('xml2json', function () {
248248

249249
done();
250250
});
251-
251+
252252
it('C: overrides text node with option as "xx" string', function(done) {
253253

254254
var xml = internals.readFixture('alternate-text-node-A.xml');
255255
var result = parser.toJson(xml, {alternateTextNode: "xx", reversible: true});
256256
var json = internals.readFixture('alternate-text-node-C.json');
257-
257+
258258
expect(result).to.equal(json);
259259

260260
done();
@@ -299,6 +299,32 @@ describe('json2xml', function () {
299299

300300
done();
301301
});
302+
303+
describe('ignore null', function () {
304+
305+
it('ignore null properties {ignoreNull: true}', function (done) {
306+
307+
var json = JSON.parse( internals.readFixture('null-properties.json') );
308+
var expectedXml = internals.readFixture('null-properties-ignored.xml');
309+
310+
var xml = parser.toXml(json, {ignoreNull: true});
311+
expect(xml).to.equal(expectedXml);
312+
313+
done();
314+
});
315+
316+
it('don\'t ignore null properties (default)', function (done) {
317+
318+
var json = JSON.parse( internals.readFixture('null-properties.json') );
319+
var expectedXml = internals.readFixture('null-properties-not-ignored.xml');
320+
321+
var xml = parser.toXml(json);
322+
expect(xml).to.equal(expectedXml);
323+
324+
done();
325+
});
326+
327+
});
302328
});
303329

304330

0 commit comments

Comments
 (0)