Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript puts the variable name as it is inside a json and not its value [duplicate]

I observed a very weird phenomena in javascript and I can't figure out why. Consider this example below

state = "West Bengal"
city = "Kolkata"
country = "India"
some_json = {country: {"city": city, "state": state, "col_val": {}}}
console.log(some_json)

When I do a console.log() of some_json variable, I get this below

{ country: { city: 'Kolkata', state: 'West Bengal', col_val: {} } }

As you can see it replaced every other variable's values with the one defined above except country. Why is that?

When I perform the same operation in Python, it works just fine.

state = "West Bengal"
city = "Kolkata"
country = "India"
some_json = {country: {"city": city, "state": state, "col_val": {}}}

print(some_json)

Here doing a print gives me the expected outcome

{'India': {'state': 'West Bengal', 'col_val': {}, 'city': 'Kolkata'}}

So why is it giving different outcome in javascript? How can I fix this since I need to work with this exact format?

like image 600
Souvik Ray Avatar asked Dec 11 '22 03:12

Souvik Ray


2 Answers

When using a variable as key of an object in javascript use square bracket

let state = "West Bengal"
let city = "Kolkata"
let country = "India"
some_json = {
  [country]: {
    "city": city,
    "state": state,
    "col_val": {}
  }
}
console.log(some_json)
like image 86
brk Avatar answered Dec 12 '22 17:12

brk


You need to make country a dynamic property name with []:

var state = "West Bengal",
  city = "Kolkata",
  country = "India",
  some_json = {
    [country]: {
      "city": city,
      "state": state,
      "col_val": {}
    }
  };
console.log(some_json);

Also for the record it's not a JSON object - JSON would be storing it as a string. It's a plain and simple JavaScript object.

like image 43
Jack Bashford Avatar answered Dec 12 '22 16:12

Jack Bashford