在PaperJS中加载外部JSON文件

时间:2016-01-15 14:11:33

标签: javascript json paperjs

我认为这很简单:

project.importJSON('structures.json')

不幸的是,这给了我:

JSON Parse error: Unexpected identifier "structures"

"structures"必须来自JSON文件structures.json本身,如下所示:

{
    "structures": [
        {"name":"shed",     "width": 4, "height": 3,    "depth": 5},
        {"name": "house",   "width": 6, "height": 7,    "depth": 5},
        {"name": "factory", "width": 4, "height": 3.5,  "depth": 6.5, 
                                                        "depth_sub_1": 5.5, 
                                                        "depth_sub_2": 4.5 }
    ]   
}

有关如何使这项工作的任何想法?我不想为此使用jQuery。

修改

所以在我看来,使用importJSON只能在JSON是实际的Paper对象时才能工作。同样的错误继续发生。

替代方案是什么?我想我的外部'结构'数据基本一个JavaScript文件中。我应该使用常规路线吗?

我的HTML看起来像这样:



<head>
  <script type="text/javascript" src="../../assets/javascript/paper-full.js"></script>
  <script type="text/paperscript" src="I/a_view_on_my_structures.js" canvas="phase-I"></script>
</head>

<body>
  <canvas id="phase-I" resize="true"></canvas>
</body>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您应该对数据进行字符串化。

var structures = {
    "structures": [
        {"name":"shed",     "width": 4, "height": 3,    "depth": 5},
        {"name": "house",   "width": 6, "height": 7,    "depth": 5},
        {"name": "factory", "width": 4, "height": 3.5,  "depth": 6.5, 
                                                        "depth_sub_1": 5.5, 
                                                        "depth_sub_2": 4.5 }
    ]   
}
project.importJSON(JSON.stringify(structures))

如果您的json数据位于不同的文件中,则应首先读取该文件

这是您阅读文件的方式

<强>同步

var client = new XMLHttpRequest();
  client.open('GET', 'path/to/your/file', false);
  client.onreadystatechange = function() {
    //your data is in client.responseText
    console.log(client.responseText);
  }
  client.send(null);

<强>异步

var client = new XMLHttpRequest();
  client.open('GET', 'path/to/your/file');
  client.onreadystatechange = function() {
    //your data is in client.responseText
    console.log(client.responseText);
  }
  client.send();

请注意,当您执行此操作时,您不需要对数据进行字符串化,因为您将其作为文本阅读,因此您只需将client.responseText内容传递给importJSON功能