sjson.js 799 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use strict';
  2. const sjs = require('./sjs');
  3. /**
  4. * escape json
  5. * for output json in script
  6. */
  7. function sanitizeKey(obj) {
  8. if (typeof obj !== 'object') return obj;
  9. if (Array.isArray(obj)) return obj;
  10. if (obj === null) return null;
  11. if (obj instanceof Boolean) return obj;
  12. if (obj instanceof Number) return obj;
  13. if (obj instanceof Buffer) return obj.toString();
  14. for (const k in obj) {
  15. const escapedK = sjs(k);
  16. if (escapedK !== k) {
  17. obj[escapedK] = sanitizeKey(obj[k]);
  18. obj[k] = undefined;
  19. } else {
  20. obj[k] = sanitizeKey(obj[k]);
  21. }
  22. }
  23. return obj;
  24. }
  25. function jsonEscape(obj) {
  26. return JSON.stringify(sanitizeKey(obj), function(k, v) {
  27. if (typeof v === 'string') {
  28. return sjs(v);
  29. }
  30. return v;
  31. });
  32. }
  33. module.exports = jsonEscape;