11

suppose I have {"data": {"243232": {"id": "testid","name": "test" } }}

so when I do

var a = data.243232.id; alert(a); // it gives me testid.

but when I do like

    var c = 243232; 
    var d = data.c.id;
    alert(d) //it gives as undefined.

so how to get correct value when i alert d in above case thanks.

druveen
  • 1,611
  • 3
  • 15
  • 32
  • Please accept a correct answer by clicking the green question mark beside the answer that was the best – austinbv May 15 '11 at 03:12

2 Answers2

11

Use the other notation var a = data['243232'].id

Remember all objects in JS are really just associative arrays.

Object keys just a variable in js and thus require proper naming

the variable naming rules are.

  • The first character must be a letter (either uppercase or lowercase) or an underscore (_), or a dollar sign ($).
  • Subsequent characters can be letters, numbers, underscores, or dollar signs in JavaScript Variables.
  • The JavaScript Variable name can't be a reserved word of JavaScript, see details of JavaScript Reserved Characters

JSON normally uses an eval() function to turn the string into a data-structure. This allows for incorrect keys. If you want to reference an improper key, you need to use the associative array method.

As for you addition

var c = 243232; 
var d = data[c].id;
alert(d) //it gives as undefined.

Will work

austinbv
  • 9,297
  • 6
  • 50
  • 82
6

Use data[c].id.

In JavaScript, .prop is syntactic sugar for ["prop"]. The bracket notation allows you to use values which would be invalid when using . (such as background-image) and variables.

alex
  • 479,566
  • 201
  • 878
  • 984
  • The . is not really a reference to the []. [] and . are parsed entirely differently. The main part being that with the .notation the value is parsed as a Key Variable thus it must conform to variable naming rules. The [] on the other hand are parsed as a string literal or value, which allows any characters. Take a look at the JS CFG. – austinbv May 13 '11 at 05:35