【问题标题】:Constructing JSON in Javascript在 Javascript 中构造 JSON
【发布时间】:2013-02-07 13:44:57
【问题描述】:

我正在尝试在 js 中构造 JSON 对象。在堆栈溢出本身中已经有几篇关于这个主题的帖子。参考How do i build JSON dynamically in javascript?。必须完全像帖子中提到的那样构建 JSON。

{
    "privilege": {
        "accesstype": "VIEW",
        "attribute": [
            {
                "code": "contenttype",
                "displayname": "Content type",
                "value": {
                    "valcode": "book_article",
                    "valdisplayName": "Book Article"
                }
            },
            {
                "code": "mime",
                "displayname": "Mime type",
                "value": {
                    "valcode": "xml",
                    "valdisplayName": "Xml"
                }
            }
        ]
    }
}

按照帖子中的答案并尝试了这个,

var privilege = {};

privilege.attribute[0].code = "contenttype";
privilege.attribute[0].displayname = "Content type";
privilege.attribute[0].value.valcode = "book_article";
privilege.attribute[0].value.valdisplayName = "Book Article";

但由于 privilege.attribute undefined 出现错误。

我无法弄清楚我哪里出错了。假设必须有一些声明问题。任何点亮它都会有很大帮助。

【问题讨论】:

  • 在添加成员之前,您是否尝试过privilege.attribute = new Array() 或类似的方法?我认为这与attribute 本身没有被声明并且您立即尝试将其用作数组这一事实有关。不过只是猜测。
  • 好吧,您必须将privilege.attribute 初始化为一个数组,并将该数组的第一个元素初始化为一个对象。请查看developer.mozilla.org/en-US/docs/JavaScript/Guide/…。构建对象后,您可以使用 JSON.stringify 将其转换为 JSON。
  • How do i build JSON dynamically in javascript? 的可能重复项-答案显示了您需要知道的所有内容,只是您没有正确遵循它。请再读一遍。话虽如此,根据您实际想要做的事情,可能有更简单的方法来创建您想要的结构(请参阅 Jim 的回答)。

标签: javascript json


【解决方案1】:

试试这个:

 var privilege = {};
 privilege.attribute = [];
 privilege.attribute[0] = {};
 privilege.attribute[0].code="contenttype";
 privilege.attribute[0].displayname="Content type";
 privilege.attribute[0].value = {};
 privilege.attribute[0].value.valcode="book_article";
 privilege.attribute[0].value.valdisplayName="Book Article";

看看 Javascript 对象。那里有很多东西。例如http://mckoss.com/jscript/object.htm

编辑:在评论提示后初始化privilege.attribute[0] = {};

【讨论】:

  • 仍然不正确。 privilege.attribute[0] 也必须初始化。
【解决方案2】:

为什么不直接做

var privilege = {
    "accesstype": "VIEW",
    "attribute": [{
        "code": "contenttype",
        "displayname": "Content type",
        "value": {
            "valcode": "book_article",
            "valdisplayName": "Book Article"
        }
    }, {
        "code": "mime",
        "displayname": "Mime type",
        "value": {
            "valcode": "xml",
            "valdisplayName": "Xml"
        }
    }]
}

...其实你不需要key是字符串,你可以写...

var privilege = {
    accesstype: "VIEW",
    attribute: [{
        code: "contenttype",
        displayname: "Content type",
        value: {
            valcode: "book_article",
            valdisplayName: "Book Article"
        }
    }, {
        code: "mime",
        displayname: "Mime type",
        value: {
            valcode: "xml",
            valdisplayName: "Xml"
        }
    }]
}

【讨论】:

    【解决方案3】:

    试试这个

    privilege.attribute = [];
    privilege.attribute.push({});
    
    privilege.attribute[0].code="contenttype";
    privilege.attribute[0].displayname="Content type";
    privilege.attribute[0].value.valcode="book_article";
    privilege.attribute[0].value.valdisplayName="Book Article";
    

    【讨论】:

    • privilege.attribute[0] 也必须初始化。
    • @Салман 感谢您的快速回复。 privilege.attribute[0].value 也必须初始化。所以做了这样的事情,privilege.attribute[0].value = {};
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多