Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将变量名放在json中,而不是其值_Javascript_Json_String_Object - Fatal编程技术网

Javascript将变量名放在json中,而不是其值

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

我在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: '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看起来很相似,但却是两个不同的东西。不要把它们混为一谈。