jQueryの $.getJSON() を使うと、REST APIや外部サービスからJSONデータを簡単に取得できます。この記事では$.getJSONの基本・REST APIからのデータ取得・DOM描画・エラー処理・ローカルJSONファイルの読み込み・fetchとの比較まで解説します。
この記事でわかること
- $.getJSON() でJSONデータを取得する基本的な使い方
- REST APIからデータを取得してDOMに表示する
- エラーハンドリングとローディング表示
- ローカルのJSONファイルを読み込む
- JSON.parse / JSON.stringify との使い分け
$.getJSON() の基本的な使い方
// $.getJSON(url, callback) → レスポンスを自動でJSONパース
$.getJSON('/api/users', function (data) {
console.log('取得データ:', data);
console.log('件数:', data.length); // 配列の場合
console.log('名前:', data[0].name); // オブジェクトのプロパティ
});
// Promiseチェーンで書く(推奨: エラーも処理できる)
$.getJSON('/api/users')
.done(function (data) {
console.log('成功:', data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.error('失敗:', jqXHR.status, errorThrown);
});
$.getJSON は $.ajax の shorthand
$.getJSON(url, fn) は $.ajax({ url, type: "GET", dataType: "json" }) と同等です。JSONパースはjQueryが自動で行うため、JSON.parse() を手動で呼ぶ必要はありません。REST APIからデータを取得してDOMに表示する
<ul id="user-list"><li id="loading">読み込み中...</li></ul>
$(function () {
$.getJSON('https://jsonplaceholder.typicode.com/users')
.done(function (users) {
var $list = $('#user-list').empty();
$.each(users, function (i, user) {
var $li = $('<li>')
.append($('<strong>').text(user.name))
.append(' — ')
.append($('<span>').text(user.email));
$list.append($li);
});
})
.fail(function () {
$('#user-list').html('<li>データの取得に失敗しました</li>');
});
});
ユーザーデータはXSS対策でtextContentで挿入する
APIから取得したデータをそのままHTMLとして挿入すると、XSSの脆弱性が生じます。jQueryの
APIから取得したデータをそのままHTMLとして挿入すると、XSSの脆弱性が生じます。jQueryの
.text() や .append($("<span>").text(...)) を使えば、HTMLエスケープが自動で行われます。.html() に未検証のデータを渡さないでください。ネストされたJSONデータの扱い
// 例: { "user": { "name": "山田", "address": { "city": "東京" } }, "posts": [...] }
$.getJSON('/api/profile')
.done(function (data) {
var user = data.user;
var city = data.user.address.city;
var posts = data.posts; // 配列
console.log(user.name, city);
// 配列はeachで処理
$.each(posts, function (i, post) {
console.log(i, post.title);
});
// または JavaScript のmap/filter
var titles = posts.map(function (p) { return p.title; });
console.log('タイトル一覧:', titles);
});
ローカルのJSONファイルを読み込む
Webサーバー経由でJSONファイルを読み込む方法です(file:// プロトコルでは動作しません)。
// サーバー上の /data/config.json を読み込む
$.getJSON('/data/config.json')
.done(function (config) {
console.log('設定値:', config.theme, config.language);
applyConfig(config);
})
.fail(function (jqXHR) {
if (jqXHR.status === 404) {
console.error('設定ファイルが見つかりません');
}
});
$.getJSON / $.ajax / fetch の使い分け
| 方法 | 特徴 | 使い所 |
|---|---|---|
$.getJSON() |
シンプル・自動パース | GETでJSONを取得するだけ |
$.ajax() |
POST/PUT/DELETEも可能・詳細設定 | ヘッダー付与・認証・POST送信 |
fetch() |
標準API・async/await対応 | 新規プロジェクト・jQuery不使用 |
JSON.parse() |
文字列をJSONオブジェクトに変換 | localStorage/cookieのデータ変換 |
まとめ
jQueryでJSONデータを取得する際のポイントをまとめます。
- 基本:
$.getJSON(url)→.done()/.fail() - DOM挿入:
.text()を使ってXSSを防ぐ - 配列データ:
$.each()または.map()で処理 - ローカルJSONはサーバー経由で読み込む(file://は非対応)
関連記事: GETリクエストを送信する方法 / POSTリクエストを送信する方法 / 検索サジェスト機能の完全ガイド
よくある質問(FAQ)
Q取得したJSONをコンソールで確認する方法は?
A
console.log(data) で取得したオブジェクト全体を確認できます。ブラウザの開発者ツール(F12 → コンソール)でオブジェクトを展開して内部構造を確認してください。console.log(JSON.stringify(data, null, 2)) でインデント付きの文字列として表示することもできます。Q「Unexpected end of JSON input」エラーが出ます。
Aサーバーが空のレスポンスや不正なJSON文字列を返している場合に発生します。開発者ツールのNetworkタブでレスポンスの内容を確認してください。APIが
nullや空文字を返す場合は dataType: "text" にして手動パースするか、サーバー側で必ずJSONを返すよう修正してください。Q取得したデータを別の関数に渡したいです。
AAjax処理は非同期なため、
.done() のコールバック内で関数を呼び出す必要があります。.done(function(data) { processData(data); }) のように書いてください。コールバック外では非同期処理の結果はまだ取得されていません。QクロスドメインのJSONPを取得したいです。
AJSONP(JSON with Padding)はCORS普及前の手法で、現在は非推奨です。代わりにサーバー側でCORSヘッダー(
Access-Control-Allow-Origin)を設定する方法を使ってください。どうしてもJSONPを使う場合は $.ajax({ url, dataType: "jsonp" }) で対応できます。Q取得したJSONをlocalStorageにキャッシュしたいです。
AlocalStorageは文字列のみ保存できるため、
JSON.stringify() で変換して保存します:localStorage.setItem("cache", JSON.stringify(data))読み出し時は JSON.parse(localStorage.getItem("cache")) で戻します。キャッシュの有効期限管理は、保存時にタイムスタンプも一緒に保存して判定します。