Javascript将变量名放在json中,而不是其值
我在javascript中观察到一个非常奇怪的现象,我不知道为什么。考虑下面的例子Javascript将变量名放在json中,而不是其值,javascript,json,string,object,Javascript,Json,String,Object,我在javascript中观察到一个非常奇怪的现象,我不知道为什么。考虑下面的例子 state = "West Bengal" city = "Kolkata" country = "India" some_json = {country: {"city": city, "state": state, "col_val": {}}} console.log(some_json) 当我对某个json变量执行console.log()时,我得到如下结果 { country: { city: 'Ko
state = "West Bengal"
city = "Kolkata"
country = "India"
some_json = {country: {"city": city, "state": state, "col_val": {}}}
console.log(some_json)
当我对某个json
变量执行console.log()
时,我得到如下结果
{ country: { city: 'Kolkata', state: 'West Bengal', col_val: {} } }
正如您所见,它用上面定义的值替换了所有其他变量的值,除了国家
。为什么呢
当我在Python中执行相同的操作时,效果很好
state = "West Bengal"
city = "Kolkata"
country = "India"
some_json = {country: {"city": city, "state": state, "col_val": {}}}
print(some_json)
在这里进行打印
可以得到预期的结果
{'India': {'state': 'West Bengal', 'col_val': {}, 'city': 'Kolkata'}}
那么为什么它在javascript中给出不同的结果呢?既然我需要使用这种精确的格式,我如何解决这个问题呢?在javascript中使用变量作为对象的键时,请使用方括号
let state=“西孟加拉邦”
让城市=“加尔各答”
让国家=“印度”
一些_json={
[国家]:{
“城市”:城市,
“国家”:国家,
“col_val”:{}
}
}
console.log(一些json)
您需要使用[]
将国家设置为动态属性名:
var state=“西孟加拉邦”,
城市=“加尔各答”,
country=“印度”,
一些_json={
[国家]:{
“城市”:城市,
“国家”:国家,
“col_val”:{}
}
};
log(一些json)代码>像这样使用它,它就会工作
state = "West Bengal"
city = "Kolkata"
country = "India"
some_json = {}
some_json[country] = {"city": city, "state": state, "col_val": {}}
console.log(some_json)
正如你所说的,它在Python中工作,Python会把它看作字典,而不是JSON对象。
在JavaScript中,默认情况下,它仅用变量替换JSON的值部分。它不会考虑用可变值替换键。
强制JavaScript考虑密钥并用变量值替换它,必须使用>[]/COD>显式地告诉JavaScript。请尝试以下代码:
state=“西孟加拉邦”
城市=“加尔各答”
国家=“印度”
some_json={[国家]:{“城市”:城市,“州”:州,“col_val”:{}
log(some_json)
当您执行{country:{“city”:city,“state”:state,“col_val”:{}}
这里的country不引用country变量。如果您选择了动态使用键
同样,当您想使用country
变量访问属性值时,不要使用some\u josn.country
像这样使用some\u josn[country]
let state=“西孟加拉邦”
让城市=“加尔各答”
让国家=“印度”
some_json={[国家]:{“城市”:城市,“州”:州,“col_val”:{}
log(一些json)
log(some_json[country])//从“some_json”接受“Inida”
,在这两种情况下,您都不是在使用json。一个是JavaScript对象,另一个是Python字典。至于为什么在JavaScript中没有替换country
:因为它是一个键,而不是一个值。JavaScript对象文本和JSON看起来很相似,但却是两个不同的东西。不要把它们混为一谈。