4

I am trying to construct JSON object in js. There are couple of posts already about this topic in stack overflow itself. Referred to How do i build JSON dynamically in javascript?. Have to construct JSON exactly something like mentioned in the post.

{
    "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"
                }
            }
        ]
    }
}

Follwed the answers in the post and tried this,

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";

But getting error as privilege.attribute undefined.

I am not able to figure out where I am going wrong. Assuming there must be some declaration problems. Any light on it would be of great help.

4
  • json.org/js.html Commented Feb 7, 2013 at 13:47
  • 3
    Have you tried privilege.attribute = new Array() or something like that before adding the members to it? I think it has to do with the fact that attribute itself is not being declared and you're immediately trying to use it as an array. Just a guess though. Commented Feb 7, 2013 at 13:48
  • Well, you have to initialize privilege.attribute as an array and the first element of that array as an object. Please have a look at developer.mozilla.org/en-US/docs/JavaScript/Guide/…. Once you built the object, you can use JSON.stringify to convert it to JSON. Commented Feb 7, 2013 at 13:51
  • 1
    possible duplicate of How do i build JSON dynamically in javascript? -- the answer shows everything you need to know, you just did not follow it properly. Please read it again. That being said, depending on what you actually want to do, there might be much easier ways to create the structure you want (see Jim's answer). Commented Feb 7, 2013 at 13:56

3 Answers 3

9

Try this:

 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";

Have a look at Javascript Object. There is a lot of stuff out there. E.g http://mckoss.com/jscript/object.htm

Edit: Initialized privilege.attribute[0] = {}; after hint in comment.

Sign up to request clarification or add additional context in comments.

1 Comment

Still not correct though. privilege.attribute[0] has to be initialized too.
1

Why not just do

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"
        }
    }]
}

... in fact, you don't need the keys to be strings, you could write...

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"
        }
    }]
}

Comments

0

Try this

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";

2 Comments

privilege.attribute[0] has to be initialized too.
@Салман Thanks for the quick response. privilege.attribute[0].value had to be initialized too. So did something like this, privilege.attribute[0].value = {};

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.