【问题标题】:How do I load and use a static JSON file using CoffeeScript?如何使用 CoffeeScript 加载和使用静态 JSON 文件?
【发布时间】:2014-08-10 15:57:44
【问题描述】:

我得到了一些使用“requirejs”的建议,但无法让它发挥作用。我是 CoffeeScript 的新手,也是 JavaScript 的新手。

我的 JSON 文件(或者更准确地说是一个包含 JSON 字符串的 js 文件)如下所示:

define(function(require)
{
  return 
  {
    "name": "Joe",
    "age": 30
  }
});

我的 app.coffee 有:

requirejs.config
  paths:
    text: "<path to requirejs-text>"
    json_path: "<path to json file>"

我的 main.coffee 有:

define(require) ->
  ko = require 'knockout'
  $ = require 'jquery'
  jsonObj = require 'json_path'

  class Main_App
    constructor ->
      @age = ko.observable jsonObj.age

我在生成的 JavaScript 中收到以下错误:

Uncaught SyntaxError: Unexpected token :

它在抱怨该行中的冒号:

“姓名”:“乔”,

很明显,我的 JSON 字符串周围的 javascript 包装器结构不正确。我想直接读取“data.json”文件,但它正在寻找“.js”文件。有人告诉我,我需要将 JSON 字符串包装在 javascript“define(function(require)”中,但我似乎无法找到有关如何格式化它的帮助。任何人都可以让我摆脱困境吗? 谢谢!

【问题讨论】:

  • 根据 JSON Lint,嵌入的 JSON 字符串是有效的。问题似乎是需要与requirejs一起使用的“javascript函数包装器”。我被指示让它看起来像这样,以便它“返回”一个 JSON 字符串。
  • 有没有更好的方法让 CoffeeScript 读取未包含在 javascript 代码中的“原始 JSON”文件?

标签: javascript json coffeescript


【解决方案1】:

JavaScript 的自动分号插入似乎在这里犯了罪。

当你写作时

define(function(require)
{
  return // a ; is added here. 
  {
    "name": "Joe",
    "age": 30
  }
});

return 语句后面加了一个分号,所以函数返回 undefined 而不是你的对象。

试试这样吧:

define(function(require)
{
  return {
    "name": "Joe",
    "age": 30
  };
});

【讨论】:

  • 喂!非常感谢。我认为 JavaScript 是一种与空格无关的语言。我没有意识到它将换行符视为隐式分号。
猜你喜欢
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2015-09-16
  • 2020-07-18
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多