在json对象中添加额外的值

时间:2015-02-05 15:08:13

标签: javascript jquery json

例如

我的对象名为tempobj,下面是tempobj[0]tempobj[1]示例数据。

我想添加名称和状态这个对象的额外信息

tempobj ["info"]["name"] = "title";
tempobj ["info"]["id"] = "23243";

但是当我做stringify时,Jquery忽略了这个值...我怎样才能将这样的数据添加到这种结构中。

 [
        [{
            "name": "Breakfast",
            "value": "buffalo strip ",
            "check": 0
        }, {
            "name": "snack ",
            "value": "pecan pie butter",
            "check": 0
        }, {
            "name": "dessert",
            "value": "chocolate zucchani brownie",
            "check": 0
        }],
        [{
            "name": "Breakfast",
            "value": "Stir Fried Kale and Baccon  ",
            "check": 1
        }, {
            "name": "snack ",
            "value": "Smoked Salmon nori roll  "
        }, {
            "name": "dessert",
            "value": "Apple muffins"
        }]

2 个答案:

答案 0 :(得分:2)

tempobj是一个数组([])。

当您尝试使用以下内容设置某些值时:

tempobj["info"]["name"] = "title";
tempobj["info"]["id"] = "23243";

您将其视为对象({})。

如果您想向tempobj添加一些数据,则必须更改其结构,例如:

{
    "info": {
        "name": "title",
        "id": "23243"
    },
    "items": [
        [{
            "name": "Breakfast",
            "value": "buffalo strip ",
            "check": 0
        }, {
            "name": "snack ",
            "value": "pecan pie butter",
            "check": 0
        }, {
            "name": "dessert",
            "value": "chocolate zucchani brownie",
            "check": 0
        }],
        [{
            "name": "Breakfast",
            "value": "Stir Fried Kale and Baccon  ",
            "check": 1
        }, {
            "name": "snack ",
            "value": "Smoked Salmon nori roll  "
        }, {
            "name": "dessert",
            "value": "Apple muffins"
        }]
    ]
}

以下是一个示例:

var tempobj = {
    items: [
        [{
            "name": "Breakfast",
            "value": "buffalo strip ",
            "check": 0
        }, {
            "name": "snack ",
            "value": "pecan pie butter",
            "check": 0
        }, {
            "name": "dessert",
            "value": "chocolate zucchani brownie",
            "check": 0
        }],
        [{
            "name": "Breakfast",
            "value": "Stir Fried Kale and Baccon  ",
            "check": 1
        }, {
            "name": "snack ",
            "value": "Smoked Salmon nori roll  "
        }, {
            "name": "dessert",
            "value": "Apple muffins"
        }]
    ]
}

tempobj.info = {
    name: 'title',
    id: '23243'
};

// Another way:
//tempobj.info = {};
//tempobj.info.name = 'title';
//tempobj.info.id = '23243';

console.log(JSON.stringify(tempobj));

答案 1 :(得分:0)

听起来你正在做这样的事情:

// Create an array
var a = [];

// Add an entry to it
a[0] = "I'm an array entry";

// Add a non-entry property to it
a.foo = "bar";

// Convert to JSON
var json = JSON.stringify(a);

...并发现该字符串没有foo属性。

那是对的。 JSON的数组不像JavaScript的数组那样支持任意非条目属性,因此它们在序列化过程中被静默删除(与值为undefined或引用的属性相同)功能确实。)

如果您需要通过JSON,答案是不要这样做。

但是,您在问题中稍后引用的结构并没有这样做,并且可以像这样轻松创建:

var data = [
    [
        {
            "name": "Breakfast",
            "value": "buffalo strip ",
            "check": 0
        },
        {
            "name": "snack ",
            "value": "pecan pie butter",
            "check": 0
        },
        {
            "name": "dessert",
            "value": "chocolate zucchani brownie",
            "check": 0
        }
    ],
    [
        {
            "name": "Breakfast",
            "value": "Stir Fried Kale and Baccon  ",
            "check": 1
        },
        {
            "name": "snack ",
            "value": "Smoked Salmon nori roll  "
        },
        {
            "name": "dessert",
            "value": "Apple muffins"
        }
    ]
];

var json = JSON.stringify(data);

该结构(来自外部):包含两个条目的数组,每个条目是另一个数组;在每个数组中,你有一系列具有属性的对象。

我不知道你为什么要把两个数组放在最外面的数组中,但这就是结构显示的内容。

如果你只是一个数组,如果你一次创建它就会是这样的:

var data = [
    {
        "name": "Breakfast",
        "value": "buffalo strip ",
        "check": 0
    },
    {
        "name": "snack ",
        "value": "pecan pie butter",
        "check": 0
    },
    {
        "name": "dessert",
        "value": "chocolate zucchani brownie",
        "check": 0
    },
    {
        "name": "Breakfast",
        "value": "Stir Fried Kale and Baccon  ",
        "check": 1
    },
    {
        "name": "snack ",
        "value": "Smoked Salmon nori roll  "
    },
    {
        "name": "dessert",
        "value": "Apple muffins"
    }
];

var json = JSON.stringify(data);

......或者如果随着时间的推移建立它:

var data = [];
data.push({
    name: "Breakfast",
    value: "buffalo strip ",
    check: 0
});
data.push({
    name: "snack ",
    value: "pecan pie butter",
    check: 0
});
// ...

var json = JSON.stringify(data);