【问题标题】:Reference a JSON array that has no name [duplicate]引用没有名称的 JSON 数组 [重复]
【发布时间】:2016-04-06 21:06:13
【问题描述】:

我有一个 JSON 数组保存到它自己的文件 gamedata.json 中。如果这只是一个常规的对象数组,例如加载到我的 HTML 中的 gamedata.js,我可以给数组一个名称 var gameObjects = array [{lots of objects}];,然后如果我想查看数组,我可以只引用 gameObjects,甚至来自其他 JS文件加载到同一个 HTML 页面中。

但是由于这是一个 JSON 文件,我该如何引用它呢?这是我第一次使用 JSON,但我了解到我无法将数组设置为 .json 文件中的变量。那么如何从其他 JS 文件中获取它的数据呢?

我可以使用 VanillaJS 或 jQuery,它的数组很大,大约 13000 行,所以效率很重要。

【问题讨论】:

  • 上下文是什么 - Node.js 或浏览器或其他什么?您必须将 JSON 作为文本导入,使用 JSON.parse() 对其进行解析,并将结果分配给 JavaScript 变量。具体如何执行取决于需要访问的 JavaScript 代码的执行环境与 JSON 文件的位置/情况之间的关系。
  • 以上评论是正确的。从文件系统读取数据有两种截然不同的方法。自从您提到 jquery 以来,我认为您在浏览器中。
  • 对不起,应该更清楚。浏览器。如何将 JSON 作为文本导入?

标签: javascript jquery json


【解决方案1】:

使用fetch,即supported in some modern browsers,但也可以是polyfilled

fetch( 'gamedata.json' )
  .then( res => res.json() ) 
  .then( data => {
    // data is available here and has been parsed into an array already
  })
  .catch( err => errorHandler )

如果您使用 browserify,那么它会将 json 文件拉入您的 javascript 包中并将其作为模块公开(不确定其他捆绑器,例如 webpack 或 jspm 是否具有相同的机制),即

var data = require( 'gamedata.json' )

但请注意,它在构建时执行此操作,如果您的 json 文件是动态的,那么此实现将不适合您。

【讨论】:

    【解决方案2】:

    可能的解决方案是:

    var myJson;
    $.getJSON("z.json", function(data) {
      myJson = data;
    });
    

    【讨论】:

    • 此解决方案有效。很简单。它是异步发生的,对吧?因此,当我尝试引用myJson 时,它会显示未定义。所以我只是将引用myJson 的代码放在getJSON 函数中。这样做可以吗?它似乎有效。
    • @Chirpizard 是的,它是异步的。你能接受并投票吗?
    猜你喜欢
    • 2017-06-10
    • 2019-01-27
    • 2020-08-09
    • 2021-10-25
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多