【问题标题】:Javascript puts the variable name as it is inside a json and not its value [duplicate]Javascript将变量名放在json中而不是它的值[重复]
【发布时间】:2019-07-28 23:03:20
【问题描述】:

我在 javascript 中观察到一个非常奇怪的现象,但我不知道为什么。考虑下面这个例子

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

当我执行some_json 变量的console.log() 时,我会在下面得到这个

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

如您所见,它将所有其他变量的值替换为上面定义的值,country 除外。这是为什么呢?

当我在 Python 中执行相同的操作时,它工作得很好。

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

print(some_json)

在这里做一个print 给了我预期的结果

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

那么为什么它会在 javascript 中给出不同的结果呢?由于我需要使用这种确切的格式,我该如何解决这个问题?

【问题讨论】:

  • 在这两种情况下,您都在使用 JSON。一个是 JavaScript 对象,另一个是 Python 字典。至于为什么 country 在 JavaScript 中没有被替换:因为它是一个键,而不是一个值。

标签: javascript json string object


【解决方案1】:

在 javascript 中使用变量作为对象的键时使用方括号

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

【讨论】:

    【解决方案2】:

    您需要使用[]country 设为动态属性名称:

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

    此外,它不是 JSON 对象 - JSON 会将其存储为字符串。这是一个简单明了的 JavaScript 对象。

    【讨论】:

      【解决方案3】:

      像这样使用它,它会工作的

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

      【讨论】:

        【解决方案4】:

        正如你所说的它在 python 中工作,Python 会将它视为字典而不是 JSON 对象。

        在 JavaScript 中,默认情况下它只用变量替换 JSON 的值部分。它不会考虑用变量值替换键。

        要强制 JavaScript 考虑键并将其替换为变量值,您必须使用 [] 明确告知 JavaScript。试试下面的代码:

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

        【讨论】:

        • JavaScript 对象字面量和 JSON 看起来很相似,但却是两个不同的东西。不要把它们混为一谈。
        【解决方案5】:

        当您在此处执行{country: {"city": city, "state": state, "col_val": {}}} 时,国家不引用国家变量。如果您是动态使用的关键,请使用 Computed property names

        同样,当您想使用country 变量访问属性值时,请不要使用some_josn.country 使用Bracket Notation 像这样some_josn[country]

        let state = "West Bengal"
        let city = "Kolkata"
        let country = "India"
        some_json = {[country]: {"city": city, "state": state, "col_val": {}}}
        console.log(some_json)
        console.log(some_json[country]) //accesing "Inida" from "some_json"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-28
          • 2012-09-13
          • 1970-01-01
          • 2020-10-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多