コンテンツにスキップ

JavaScript/JSON

出典: フリー教科書『ウィキブックス(Wikibooks)』

JSON オブジェクトは、JavaScript Object Notation (JSON) フォーマットでデータをエンコード/デコードするための機能を提供します。このオブジェクトは、JavaScript 値を JSON 文字列に変換したり、JSON 文字列を JavaScript 値に変換したりするメソッドを提供します[1]

プロパティ

[編集]

JSON オブジェクトは、以下のメソッドを持っています:

メソッド

[編集]

JSON.parse()

[編集]
JSON.parse(text[, reviver])
  • text: 解析する JSON 文字列。
  • reviver (オプション): 変換結果のキーと値のペアに対して変換処理を行う関数。

JSON.stringify()

[編集]
JSON.stringify(value[, replacer[, space]])
  • value: JSON 文字列に変換する値。
  • replacer (オプション): 値の変換方法をカスタマイズするための関数または配列。
  • space (オプション): 読みやすさを向上させるための空白の挿入方法を指定します。

[編集]

JSON.parse() の基本的な使用方法

[編集]

以下のプログラムは、JSON.parse() を使用して JSON 文字列を JavaScript オブジェクトに変換する方法を示しています。

const jsonString = '{"name":"山田太郎","age":30,"isStudent":false,"hobbies":["読書","旅行","料理"]}';
const person = JSON.parse(jsonString);

console.log(person.name); // "山田太郎"
console.log(person.age); // 30
console.log(person.hobbies[1]); // "旅行"

このプログラムでは、JSON.parse() を使用して JSON 文字列を JavaScript オブジェクトに変換しています。変換後のオブジェクトのプロパティにアクセスできます。

JSON.stringify() の基本的な使用方法

[編集]

以下のプログラムは、JSON.stringify() を使用して JavaScript オブジェクトを JSON 文字列に変換する方法を示しています。

const person = {
  name: "山田太郎",
  age: 30,
  isStudent: false,
  hobbies: ["読書", "旅行", "料理"],
  address: {
    city: "東京",
    postalCode: "123-4567"
  }
};

const jsonString = JSON.stringify(person);
console.log(jsonString);
// {"name":"山田太郎","age":30,"isStudent":false,"hobbies":["読書","旅行","料理"],"address":{"city":"東京","postalCode":"123-4567"}}

// 整形して出力
const formattedJson = JSON.stringify(person, null, 2);
console.log(formattedJson);
/*
{
  "name": "山田太郎",
  "age": 30,
  "isStudent": false,
  "hobbies": [
    "読書",
    "旅行",
    "料理"
  ],
  "address": {
    "city": "東京",
    "postalCode": "123-4567"
  }
}
*/

このプログラムでは、JSON.stringify() を使用して JavaScript オブジェクトを JSON 文字列に変換しています。また、第3引数に 2 を指定することで、読みやすく整形された JSON 文字列が生成されます。

reviver 関数と replacer 関数の使用例

[編集]

以下のプログラムは、JSON.parse() の reviver 関数と JSON.stringify() の replacer 関数を使用する方法を示しています。

// 日付文字列を Date オブジェクトに変換する reviver 関数
const jsonWithDate = '{"name":"イベント1","date":"2023-05-15T09:00:00.000Z"}';
const eventObj = JSON.parse(jsonWithDate, (key, value) => {
  if (key === "date" && typeof value === "string") {
    return new Date(value);
  }
  return value;
});

console.log(eventObj.date.getFullYear()); // 2023
console.log(eventObj.date instanceof Date); // true

// Date オブジェクトをカスタム形式で変換する replacer 関数
const eventToSend = {
  name: "イベント2",
  date: new Date("2023-06-20T14:30:00.000Z"),
  location: "東京",
  private: true
};

const jsonString = JSON.stringify(eventToSend, (key, value) => {
  if (key === "private") {
    return undefined; // private プロパティを除外
  }
  if (value instanceof Date) {
    return value.toLocaleDateString(); // 日付を特定の形式に変換
  }
  return value;
});

console.log(jsonString);
// {"name":"イベント2","date":"2023/6/20","location":"東京"}

このプログラムでは、JSON.parse() の reviver 関数を使用して日付文字列を Date オブジェクトに変換し、JSON.stringify() の replacer 関数を使用して特定のプロパティを除外したり、Date オブジェクトをカスタム形式に変換したりしています。

注意点

[編集]
  • サポートされるデータ型: JSON は数値、文字列、ブール値、null、オブジェクト、配列のみをサポートします。undefined、関数、Symbol、循環参照は直接サポートされません。
  • 安全性: JSON.parse() に信頼できないソースからの文字列を渡す前に検証を行うべきです。
  • 日付の扱い: JSON は日付型をネイティブにサポートしていないため、Date オブジェクトは文字列として変換されます。
  • BigInt: BigInt 値は JSON.stringify() でサポートされていないため、TypeError が発生します。

脚註

[編集]
  1. ^ JSON は、データ交換フォーマットとして広く使用されており、特に Web API との通信で頻繁に利用されます。

外部リンク

[編集]