生成仅包含 JSON 中某些属性的 JS 对象的 JSON

发布于 2024-11-03 02:20:40 字数 126 浏览 0 评论 0原文

我正在从 javascript 对象生成 JSON。但我不需要 JSON 中对象的所有属性。有没有办法(或图书馆)来做到这一点?到目前为止,我重写了 toJSON 函数并返回一个具有减少属性的新对象,但这是一个令人讨厌的解决方法,不是吗?

I'm generating JSON from a javascript object. But I do not need all attributes from the object in the JSON. Is there a way (or a library) to do this? Till now, I overrided the toJSON function and return a new Object with reduced attributes, but its a nasty workaround, isn't it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

左岸枫 2024-11-10 02:20:40

JSON.stringify 接受第二个参数,即“替换器”函数,您可以使用它来排除某些属性。

var exclude = { 'akey': true };

var obj = { 'akey': 2, 'anotherkey': 3 };

JSON.stringify(obj, function (key, value) {
    if(exclude[key]) return undefined;
    return value;
});

=> "{'anotherkey':3}"

JSON.stringify accepts a second parameter, a "replacer" function, that you may be able to use to exclude certain properties.

var exclude = { 'akey': true };

var obj = { 'akey': 2, 'anotherkey': 3 };

JSON.stringify(obj, function (key, value) {
    if(exclude[key]) return undefined;
    return value;
});

=> "{'anotherkey':3}"
掌心的温暖 2024-11-10 02:20:40

有趣的是,我刚刚编写了一些代码来执行此操作(使用对象),然后您可以序列化目标。

// sorta like $.extend but limits to updating existing properties
// from a template. takes any number of objects to merge.
function mergeObjects(template) {
    var obj={};
    if (arguments) {
        for (var i = 0; i < arguments.length; i++) {
            newObj = arguments[i];
            for (var prop in template) {
                if (newObj.hasOwnProperty(prop)) {
                    obj[prop] = newObj[prop];
                }
            }
        }
    }
    return obj;
}

使用此函数的方法是使用具有您需要的属性的模板对象,例如

var template = {
  firstname: '',
  lastname: ''
}

var someObject = {
  firstname: "bryce",
  lastname: "nesbitt",
  title: "ubergeek"
}

var filteredObject = mergeObjects(template,someObject);

-->

   filteredObject: {
      firstname: "bryce",
      lastname: "nesbitt",
    }

http://jsfiddle.net/AARMW/

Funny I just wrote some code to do this (with objects) which you can then serialize the target.

// sorta like $.extend but limits to updating existing properties
// from a template. takes any number of objects to merge.
function mergeObjects(template) {
    var obj={};
    if (arguments) {
        for (var i = 0; i < arguments.length; i++) {
            newObj = arguments[i];
            for (var prop in template) {
                if (newObj.hasOwnProperty(prop)) {
                    obj[prop] = newObj[prop];
                }
            }
        }
    }
    return obj;
}

The way to use this function is with a template object that has the properties you need, e.g.

var template = {
  firstname: '',
  lastname: ''
}

var someObject = {
  firstname: "bryce",
  lastname: "nesbitt",
  title: "ubergeek"
}

var filteredObject = mergeObjects(template,someObject);

-->

   filteredObject: {
      firstname: "bryce",
      lastname: "nesbitt",
    }

http://jsfiddle.net/AARMW/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文