javascript – JSON.stringify使用嵌套对象进行白名单

前端之家收集整理的这篇文章主要介绍了javascript – JSON.stringify使用嵌套对象进行白名单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

给出以下示例:

  1. var test = {
  2. "company_name": "Foobar","example": "HelloWorld","address": {
  3. "street": "My Street 12","example": "BarFoo","details": "Berlin",}
  4. }
  5. console.log(JSON.stringify(test,['company_name','address','street','example']));
  6. // What I actually want
  7. // console.log(JSON.stringify(test,'address.street','address.example']));

如何使用JSON的stringify函数正确处理嵌套对象?

由于我有巨大的JSON对象,因此嵌套对象的键与它的“父”对象相同.我想更明确地指定我的白名单.

最佳答案
如果您愿意使用白名单,那么您可以建立一组有效密钥,这些密钥可以提供嵌套功能,类似于JSON嵌套的系统数量(a.分隔符,或您选择的任何分隔符) .

  1. var whitelistedObj = whitelistJson(obj,["company_name","example","address.street","address.example"]);
  2. function whitelistJson(obj,whitelist,separator) {
  3. var object = {};
  4. for (var i = 0,length = whitelist.length; i < length; ++i) {
  5. var k = 0,names = whitelist[i].split(separator || '.'),value = obj,name,count = names.length - 1,ref = object,exists = true;
  6. // fill in any empty objects from first name to end without
  7. // picking up neighboring fields
  8. while (k < count) { // walks to n - 1
  9. name = names[k++];
  10. value = value[name];
  11. if (typeof value !== 'undefined') {
  12. if (typeof object[name] === 'undefined') {
  13. ref[name] = {};
  14. }
  15. ref = ref[name];
  16. }
  17. else {
  18. exists = false;
  19. break;
  20. }
  21. }
  22. if (exists) {
  23. ref[names[count]] = value[names[count]];
  24. }
  25. }
  26. return object;
  27. }

我有一个JSFiddle显示它的用法(以确保它实际上在我公认的小样本集上工作).

猜你在找的JavaScript相关文章