2017-11-16 12 views
0

dpmをnpmでインストールしました。 package.jsonでは、依存関係を示します"d3": "^4.11.0" version,npmでインストールされたd3ライブラリでjsonファイルがロードされない

私は次のコードを使用して、単純なJSONファイルをロードしようとした:

const d3 = require('d3') 

d3.json('jsonfile.json', (err, data) => { 
    if (err) { 
    console.log(err) 
    } 
    data.keys.map((t) => { 
    console.log(t) 
    }) 
}) 

をしかし、私はこのエラーを得た:

SyntaxError: Unexpected token T in JSON at position 0 

JSONファイルが実際にokです。このツールを使用して確認しました:https://codebeautify.org/jsonvalidator私はこの行const d3 = require('d3')を削除し、HTMLファイル内のスクリプトを直接挿入する際

はしかし、:3.5.5バージョンを使用して...

<script type='text/javascript' src='/js/d3.min.js'></script> 

、JSONファイルがロードされました。

ローカルファイルをロードするためにd3バージョン^4.11.0に新しい何かがありますか?

+0

v4スクリプトで同じソリューションを試しましたか? '' –

+0

こんにちは。その行でも正常に動作します。私は問題が 'd3'が' npm'を使ってインストールされた後で、特に新しいバージョンでは問題ないと思います。私は 'require( 'd3')'を使ってファイルを読み込んでいますが、これまでは 'SyntaxError:'があります。 –

+0

ブラウザやnodejsアプリでこれを実行していますか? Webpackを使用してバンドルを作成するときに、ブラウザでこの問題を再現することはできません。ブラウザで実行すると、ブラウザは 'require'関数をどのように解決しますか? requirejsを使用したり、webpackのようなコードをバンドルしたりしない限り、ブラウザJavaScriptはrequireを必要としません。 – HMR

答えて

1

あなたは完全なURLでJSONをロードする必要がノードアプリとしてあなたのコードを実行する場合:

const d3 = require('d3'); 
//use full url to where the json file is 
d3.json('http://localhost:8080/jsonfile.json', (err, data) => { 
    if (err) { 
    console.log(err) 
    } 
    data.keys.map((t) => { 
    console.log(t) 
    }) 
}); 

ノード・アプリケーションとしてコードを実行して、ディスクからファイルをロードしたい場合あなたのコードは、ブラウザで実行されていますが、依存関係の管理などのNPMを使用したい、あなたは(古い方法)またはWebPACKの(より良いrequirejsを使用することができますが、もう少し複雑に学ぶことをした場合

fs = require('fs'); 
const readFile = (file,encoding) => 
    new Promise(
    (resolve,reject)=> 
     fs.readFile(
     file 
     ,encoding 
     ,(err,data) => { 
      if(err !== null){ 
      reject(err);return; 
      } 
      resolve(data); 
     } 
    ) 
    ) 
; 

readFile("./static/jsonfile.json",'utf8') 
.then(
    data => 
    data.toString() 
).then(
    text => 
    console.log("Got file content:\n",text) 
    ,err => 
    console.error("Failed to load file:",err) 
); 

:そうのようなファイルを読み込むことができます設定してください)。ブラウザでコードを使用している場合は、const d3 = require('d3');でエラーが発生しないと思います。

+0

ありがとう、@HMR。私はjsonファイルのどこに完全なURLを使用していませんでした。私はプロジェクトが生産中のときにURLを変更する必要があると思います。したがって、URLを変更しないためには、 'fs'を使用する2番目のオプションが最良の選択でしょうか?再度、感謝します。 –

+0

@RamiroTormentaデータがディスク上にある場合は、ファイルを使用します。ここでは、ノードにd3を使用する方法の例を示します。https://gist.github.com/palanik/ba5e15dbbc7ea0574ae0d38252563b0dノードにはDOMがないため、node-jsdomを使用する必要があります。 'outerHTML'を使ってコンテンツを取得してください。 – HMR

+0

優秀なヒント、ありがとうございます。ですから、d3を使ってIDだけを選択したいのであれば、node-jsdom 'var document = jsdom.jsdom()'は必須です。この文書をありがとう。 –

関連する問題