【问题标题】:javascript JSON accessjavascript JSON 访问
【发布时间】:2014-01-02 04:58:00
【问题描述】:

我有一个类似这样的 JSON 对象:

var waitingGames = {
    arithemetic:[
        {
            games:[]
        },

        {
            games:[]
        },

        {
            games:[]
        }
    ]

等同义词、反义词和翻译。我的问题是我似乎无法使用以下方式访问游戏数组:

var gametype = url_parts.query.type;
var gamesize = url_parts.query.size;
if(games.waitingGames.gametype[gamesize].games.length == 0)

我知道游戏类型是未定义的,即使我已经尝试打印变量并且它具有正确的值(上例中的算术)。任何想法如何解决这个问题?

【问题讨论】:

  • 如果您的键名存储在变量中,您必须使用括号符号object[variableName] 来引用它。点符号不起作用是有道理的,因为object.variableName 暗示对象有一个名为variableName 的属性,而它应该是keyName,它只是存储在变量中。
  • 不知道这是否是相对的,但我通过使用 require 得到这个 JSON 对象:var games = require('./gameJSONobj');

标签: javascript json


【解决方案1】:

请尝试

if(games.waitingGames.arithemetic[gamesize].games.length == 0)

【讨论】:

  • 这有点毁了这一点,因为我试图传递给它应该从中获取游戏信息的函数。无论哪种方式,我也得到了 undefined 的“算术”的无法读取属性。
  • @user3152485 waitingGames 是一个变量名,而不是一个对象属性,所以你不能通过说games.waitingGames 来引用它——这就是它未定义的原因。
  • 可能是这样.. 有什么建议可以绕过它吗?因为游戏里面有 3 个变量太大而无法保持主文件干净。
  • 您能粘贴完整的 json 对象,以便我们更好地帮助您吗??
【解决方案2】:

用途:

games.waitingGames[gametype][gamesize].games.length

在这里,您使用 gametype 作为变量,就像您想要的那样。

请参阅此概念验证JSFiddle demo。

【讨论】:

  • 就像我得到一个“意外的令牌 [”错误,也试过没有点,我得到“无法读取未定义的“算术”的属性 =/
  • 抱歉,. 上的错字,已编辑。 gametype不应该等于"arithmetic"吗?
  • 另外,你在哪里定义games?如果你只是写它是否有效:games[gametype][gamesize].games.length
  • 是的,游戏是定义的,尽管从上面的解释来看它可能是它,因为我有 var games = require(./gameJSONobj);并且在该文件中作为 waitingGames 变量,它不适用于点引用
【解决方案3】:

您可以使用此表达式访问内部游戏对象的值 console.log(waitingGames.arithemetic[0].games);

使用 for 循环遍历算术数组。

for(var i =0, j = waitingGames.arithemetic.length; i<j; i++){
    if(waitingGames.arithemetic.games.length == 0){
    }
}

【讨论】:

    【解决方案4】:

    已修复,必须使用方括号来更改使用变量内容到达 JSON 对象内我想要的位置,谢谢所有

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多