2012-04-06 10 views
2

私はjQueryを使ってJSONファイルを読み込むしようとしています:jQueryを使用してJSONからファイルを読み取るにはどうすればよいですか?

 var listOfItems; 
     $(function() { 
      $.getJSON('myData.json', function(data) { 
       listOfItems = data.items; 
      }); 
     }); 

これはmydata.jsonを次のとおりです。

{ 
    {"source": "Microsoft", "target": "Amazon", "type": "licensing"}, 
    {"source": "Microsoft", "target": "HTC", "type": "licensing"}, 
    {"source": "Samsung", "target": "Apple", "type": "suit"}, 
    {"source": "Motorola", "target": "Apple", "type": "suit"} 
} 

しかし、Chromeウェブ開発者がlistOfItemsが、このコードの後に​​定義されていないことを指摘しています。どうして?私はjavascript、HTML、JSONの両方のファイルが同じディレクトリにあることを確信しています。

+1

これは有効なjsonレスポンスではありません。 – j08691

+0

ありがとう、どういう意味ですか? – dangerChihuahua007

+1

これは非同期イベントです。 – Anders

答えて

1

これは非同期イベントです。非同期イベントのような変数の代入は実行できません。その特定の関数内で実行している操作を実行する必要があります。さもなければ、同期イベント(JQueryで正しい変数を設定することによって)が動作を待つことを確認します。この場合は、コードを続行する前にGET要求が完了するようにしてください(推奨されません)。

2

JSONを修正しました。 jsonlintは何が間違っているか教えてくれます。

JSONのプロパティ名は、文字列(JavaScriptとは異なり、識別子の場合もある)であるため、となります。となります。

0

json.parseJSON()でjsonを解析できます。不正なJSON文字列に渡す

http://api.jquery.com/jQuery.parseJSON/

スローされた例外をもたらし得ます。あなたは何を渡す場合さらに、空の文字列がnull、またはundefined、「ヌル」はparseJSONから返されます

{test: 1} (test does not have double quotes around it). 
{'test': 1} ('test' is using single quotes instead of double quotes). 

:たとえば、すべての不正な形式のJSON文字列は次のとおりです。ブラウザがJSON.parseのネイティブ実装を提供する場合、jQueryはJSON.parseを使用してそれを解析します。 JSON形式の詳細については、http://json.org/を参照してください。ここ

1

あなたの主な問題は、あなたがあなたが

[ 
    {source: "Microsoft", target: "Amazon", type: "licensing"}, 
    {source: "Microsoft", target: "HTC", type: "licensing"}, 
    {source: "Samsung", target: "Apple", type: "suit"}, 
    {source: "Motorola", target: "Apple", type: "suit"}, 
] 
1

あなたmyData.jsonが有効なJSONではありません持っている必要があり含む配列

のために「{」の代わりに「[」を使用することです。

それ自体が4つのオブジェクトを含むオブジェクトを含むように見えますが、それらの内部オブジェクトにはプロパティ名が与えられていません。これは

{ 
    "one" : { "source": "Microsoft", "target" : "Amazon", "type" : "licensing" }, 
    "two" : { "source" : "Microsoft", "target" : "HTC", "type" : "licensing" }, 
    "three" : { "source" : "Samsung", "target" : "Apple", "type" : "suit" }, 
    "four" : { "source" : "Motorola", "target" : "Apple", "type" : "suit" } 
} 

しかし、あなたのlistOfItems与えられた有効だろう

、私はそれはあなたが望むものだとは思いません。おそらくオブジェクトの配列が必要です。

これは最後の項目にその末尾のコンマに気をつけ、角括弧の代わりに括弧また

[ 
    { "source": "Microsoft", "target" : "Amazon", "type" : "licensing" }, 
    { "source" : "Microsoft", "target" : "HTC", "type" : "licensing" }, 
    { "source" : "Samsung", "target" : "Apple", "type" : "suit" }, 
    { "source" : "Motorola", "target" : "Apple", "type" : "suit" } 
] 

を使用することによって行われます。それはいくつかのブラウザ/ javascriptエンジンで壊れます。 JSONパーサーが許可しているかどうかはわかりません。

関連する問題