在Meteor中导入JSON文件

时间:2013-03-12 23:11:39

标签: meteor

我有一个data.json文件,我想加载并放在lib /文件夹中。为了将JSON加载到服务器中的变量,我该怎么办? 感谢

3 个答案:

答案 0 :(得分:80)

有三种方法可以解决这个问题,这取决于你最熟悉的方法。你的用例。

第一种是将其存储为JS对象

如果您的json数据为{ "name":"bob" },则可以在myjson = {"name":"bob"}文件夹中的.js文件中使用/lib,并在需要时调用myjson

使用http呼叫

您需要Meteor http个软件包,通过meteor add http安装。

服务器端代码

myobject = HTTP.get(Meteor.absoluteUrl("/myfile.json")).data;

客户端代码

HTTP.get(Meteor.absoluteUrl("/myfile.json"), function(err,result) }
    console.log(result.data);
});

另一种方法是获取json文件ajax样式(您必须将其放在/public文件夹中,然后使用Meteor.http来调用它。

直接阅读文件

最后,您可以直接阅读该文件,将myfile.json存储在项目根目录的private目录中:

var myjson = {};
myjson = JSON.parse(Assets.getText("myfile.json"));

如果你想在客户端访问它,你必须将它与Meteor.methods和Meteor.call接口

无论你想要哪种方式,第一种方法都是最简单的,但我不太清楚你想如何使用它,或者你是否想要选择文件或其他东西

答案 1 :(得分:2)

由于我对这一切都不熟悉,我怀疑这不是正确的方式,但这对我有用...

三个咖啡脚本文件,两个在服务器目录中:

server.coffee:

Meteor.startup ->
    insertSample = (jsondata) ->
      Fiber(->
        Documents.insert
          name: "Sample doc"
          data: jsondata
      ).run()        
    if Documents.find().count() is 0
      insertJSONfile("tests/test.json", insertSample)

和insertJSONfile.coffee:

fs = __meteor_bootstrap__.require("fs")

insertJSONfile = (file, insert) ->
  jsondata = undefined
  fs.readFile file, (err, data) ->
    throw err  if err
    jsondata = JSON.stringify(JSON.parse(data))
    insert(jsondata)

和根目录中的model.coffee:

@Documents = new Meteor.Collection("documents")

在启动时,这应该加载并插入JSON文件(在我的情况下,我将它存储在tests目录中)到文档集合中的一个字段中。

我很想听听别人如何正确地做到这一点。

答案 2 :(得分:1)

我假设您希望将json内容表示为对象而不是简单字符串。

我使用js-yaml(https://github.com/nodeca/js-yaml),假设你安装了npm包。您也可以手动复制它。

yaml = __meteor_bootstrap__.require('js-yaml')
fs = __meteor_bootstrap__.require('fs')
content = fs.readFileSync(file, 'utf8')
object = yaml.load(content)

就是这样!我亲自将我的json留在流星收藏中。