139

.json ファイルを JavaScript の変数に読み込もうとしていますが、うまくいきません。おそらく単なる小さなエラーですが、見つかりません。

次のような静的データを使用すると、すべてが正常に機能します。

var json = {
  id: "whatever",
  name: "start",
  children: [{
      "id": "0.9685",
      "name": " contents:queue"
    }, {
      "id": "0.79281",
      "name": " contents:mqq_error"
    }
  }]
}

{}ここで説明されているように、ファイルにあるすべてのものを入れて、content.jsonそれをローカル JavaScript 変数にロードしようとしました: load json into variable

var json = (function() {
  var json = null;
  $.ajax({
    'async': false,
    'global': false,
    'url': "/content.json",
    'dataType': "json",
    'success': function(data) {
      json = data;
    }
  });
  return json;
})();

Chrome デバッガーで実行したところ、常に変数の値jsonnull. このcontent.jsonファイルは、それを呼び出す .js ファイルと同じディレクトリにあります。

私は何を取りこぼしたか?

4

8 に答える 8

45

オブジェクトをcontent.json直接貼り付けた場合、それは無効な JSON です。JSON のキー値は、値が数値、ブール値、または複合 (配列またはオブジェクト)でない限り、二重引用符 ( "not ) で囲む必要があります。JSON に関数や値を含めることはできません。以下は、有効な JSON としてのオブジェクトです。'nullundefined

{
  "id": "whatever",
  "name": "start",
  "children": [
    {
      "id": "0.9685",
      "name": " contents:queue"
    },
    {
      "id": "0.79281",
      "name": " contents:mqq_error"
    }
  ]
}

余分なものもありました}

于 2013-01-23T16:43:39.870 に答える
7

require または fs を使用しないソリューション:

var json = []
fetch('./content.json').then(response => json = response.json())
于 2021-01-27T16:04:09.203 に答える
5

組み込みのnode.js モジュール fsは、必要に応じて非同期または同期で実行します。

を使用してロードできますvar fs = require('fs');

非同期

fs.readFile('./content.json', (err, data) => {
    if (err)
      console.log(err);
    else {
      var json = JSON.parse(data);
    //your code using json object
    }
})

同期

var json = JSON.parse(fs.readFileSync('./content.json').toString());
于 2018-11-27T14:49:11.857 に答える
4

次の 2 つの問題が考えられます。

  1. AJAX は非同期であるためjson、外部関数から戻ると未定義になります。ファイルがロードされると、コールバック関数はjson何らかの値に設定されますが、その時点では誰も気にしません。

    でこれを修正しようとしたようです'async': false。これが機能するかどうかを確認するには、次の行をコードに追加し、ブラウザーのコンソールを確認します。

    console.log(['json', json]);
    
  2. パスが間違っている可能性があります。HTML ドキュメントにスクリプトをロードするために使用したのと同じパスを使用します。したがって、スクリプトが の場合はjs/script.js、使用しますjs/content.json

    一部のブラウザでは、アクセスしようとした URL とアクセス方法 (成功/エラー コード、HTML ヘッダーなど) を表示できます。ブラウザーの開発ツールをチェックして、何が起こるかを確認してください。

于 2013-01-23T16:38:39.550 に答える