è¤éãªãªãã¸ã§ã¯ããæã£ã¦ãããããããããã¯ã¼ã¯çµç±ã§éã£ãããåã«ãã°åºåããããã«æååã«å¤æãããã¨ãã¾ãã
ãã¡ããã夿ãããæååã«ã¯ãã¹ã¦ã®éè¦ãªããããã£ãå«ãã§ããå¿ è¦ãããã¾ãã
ç§ãã¡ã¯ã次ã®ããã«å¤æå¦çãå®è£ ãããã¨ãã§ãã¾ã:
let user = {
name: "John",
age: 30,
toString() {
return `{name: "${this.name}", age: ${this.age}}`;
}
};
alert(user); // {name: "John", age: 30}
â¦ããããéçºã®éç¨ã§ã¯ãæ°ããããããã£ã追å ãããããå¤ãããããã£ããªãã¼ã /åé¤ããã¾ãããã®ãããªç¶æ³ã§ toString ãæ¯åæ´æ°ããã®ã¯é¢åã§ãããªãã¸ã§ã¯ãä¸ã®ããããã£ãã«ã¼ããããã¨ã¯ã§ãã¾ããããªãã¸ã§ã¯ããè¤éã§ãããããã£ã«ãã¹ãããããªãã¸ã§ã¯ããããå ´åã¯ã©ããªãã§ããããï¼ ãããã®å¤æå¦çãå®è£
ããå¿
è¦ãããã¾ãã ã¾ãããããã¯ã¼ã¯çµç±ã§ãªãã¸ã§ã¯ããéä¿¡ããå ´åã«ã¯ãåä¿¡å´ã§ãããããèªã¿åããããã®ã³ã¼ããæä¾ããå¿
è¦ãããã¾ãã
幸ãã«ãããããã®å¦çãè¡ãããã«ã³ã¼ããæ¸ãå¿ è¦ã¯ããã¾ããããã®èª²é¡ã¯æ¢ã«è§£æ±ºããã¦ãã¾ãã
JSON.stringify
JSON (JavaScript Object Notation) ã¯å¤ã¨ãªãã¸ã§ã¯ãã表ç¾ããä¸è¬çãªå½¢å¼ã§ããRFC 4627 ã§æ¨æºã¨ãã¦è¨è¿°ããã¦ãã¾ããå½åã¯JavaScriptã®ããã«ä½ããããã®ã§ããããå¤ãã®ä»ã®è¨èªãåæ§ã« JSON ãå¦çããã©ã¤ãã©ãªãæã£ã¦ãã¾ããå¾ã£ã¦ãã¯ã©ã¤ã¢ã³ãã JavaScript ã使ãããµã¼ãã Ruby/PHP/Java/ãã®ä» ã§æ¸ããã¦ããå ´åã«ããã¼ã¿äº¤æã¨ãã¦JSONã使ãã®ã¯ç°¡åã§ãã
JavaScriptã¯æ¬¡ã®ã¡ã½ãããæä¾ãã¦ãã¾ã:
JSON.stringify: ãªãã¸ã§ã¯ããJSONã«å¤æãã¾ããJSON.parse: JSONããªãã¸ã§ã¯ãã«å¤æãã¾ãã
ä¾ãã°ãããã§ student ã JSON.stringify ãã¾ã:
let student = {
name: 'John',
age: 30,
isAdmin: false,
courses: ['html', 'css', 'js'],
wife: null
};
let json = JSON.stringify(student);
alert(typeof json); // string ã§ã!
alert(json);
/* JSON-encoded object:
{
"name": "John",
"age": 30,
"isAdmin": false,
"courses": ["html", "css", "js"],
"wife": null
}
*/
ã¡ã½ãã JSON.stringify(student) ã¯ãªãã¸ã§ã¯ããåãåãããããæååã«å¤æãã¾ãã
çµæã® json æåå㯠JSONã¨ã³ã³ã¼ãããã, ã·ãªã¢ã©ã¤ãºããã(serialized), æåååããã(stringified) ã¾ã㯠æ´ååããã(marshalled) ãªãã¸ã§ã¯ãã¨å¼ã°ãã¾ãã
ããã§ãããã¯ã¼ã¯çµç±ã§éä¿¡ããããã·ã³ãã«ãªãã¼ã¿ã¹ãã¢ã«æ ¼ç´ããæºåãã§ãã¾ããã
JSONã¨ã³ã³ã¼ãããããªãã¸ã§ã¯ãã¯ããªãã¸ã§ã¯ããªãã©ã«ã¨æ¯ã¹ãä½ç¹ãéè¦ãªéãããããã¨ã«æ³¨æãã¦ãã ãã:
- æååã«ã¯ããã«ã¯ã©ã¼ãã使ãã¾ããJSONã«ã¯ã·ã³ã°ã«ã¯ã©ã¼ããããã¯ã¯ã©ã¼ãã¯ããã¾ãããå¾ã£ã¦
'John'ã¯"John"ã«ãªãã¾ãã - ãªãã¸ã§ã¯ãã®ããããã£åãã¾ãããã«ã¯ã©ã¼ãã§ãããå¿
é ã§ããå¾ã£ã¦
age:30ã¯"age":30ã«ãªãã¾ãã
JSON.stringify ã¯ããªããã£ãã«å¯¾ãã¦ãåæ§ã«é©ç¨ã§ãã¾ãã
ãã¤ãã£ãã«ãµãã¼ããããJSONã¿ã¤ãã¯æ¬¡ã®ã¨ããã§ãã:
- ãªãã¸ã§ã¯ã(Object)
{ ... } - é
å(Array)
[ ... ] - ããªããã£ã(Primitives):
- æåå(strings),
- æ°å¤(numbers),
- çå½å¤(boolean values)
true/false, null.
ä¾:
// JSON å
ã®æ°å¤ã¯ã¾ãã«æ°å¤ã§ã
alert( JSON.stringify(1) ) // 1
// JSON å
ã®æååã¯æååã®ã¾ã¾ã§ãããããã«ã¯ã©ã¼ãã§ã
alert( JSON.stringify('test') ) // "test"
alert( JSON.stringify(true) ); // true
alert( JSON.stringify([1, 2, 3]) ); // [1,2,3]
JSONã¯ãã¼ã¿ã®ã¿ã®ãã«ãè¨èªä»æ§ãªã®ã§ãJavaScriptåºæã®ãªãã¸ã§ã¯ãããããã£ã®ä¸é¨ã¯ JSON.stringify ã§ã¯ã¹ãããããã¾ãã
ã¤ã¾ã:
- 颿°ããããã£(ã¡ã½ãã)
- ã·ã³ãã«ãã¼ã¨å¤
undefinedãæ ¼ç´ãã¦ããããããã£
let user = {
sayHi() { // ç¡è¦ããã
alert("Hello");
},
[Symbol("id")]: 123, // ç¡è¦ããã
something: undefined // ç¡è¦ããã
};
alert( JSON.stringify(user) ); // {} (空ãªãã¸ã§ã¯ã)
é常ããã¯åé¡ããã¾ããããããããããããªãå ´åããã®å¦çãã«ã¹ã¿ãã¤ãºãããã¨ãã§ãã¾ã(æ¹æ³ã¯å¾ã»ã©èª¬æãã¾ã)ã
ãã®ã¡ã½ããã®ç´ æ´ãããç¹ã¯ãå ¥ãåã®ãªãã¸ã§ã¯ãããµãã¼ãããã¦ããèªåçã«å¤æããããã¨ã§ãã
ä¾:
let meetup = {
title: "Conference",
room: {
number: 123,
participants: ["john", "ann"]
}
};
alert( JSON.stringify(meetup) );
/* æ§é å
¨ä½ãæåååããã¾ãã:
{
"title":"Conference",
"room":{"number":23,"participants":["john","ann"]},
}
*/
éè¦ãªå¶é: 循ç°åç §ããã£ã¦ã¯ããã¾ããã
ä¾:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: ["john", "ann"]
};
meetup.place = room; // meetup 㯠room ãåç
§
room.occupiedBy = meetup; // room 㯠meetup ãåç
§
JSON.stringify(meetup); // Error: Converting circular structure to JSON
ããã§ã¯ã循ç°åç
§(room.occupiedBy ã meetup ãåç
§ããmeetup.place ã room ãåç
§ãã¦ãã)ã®ãã夿ã失æãã¾ãã:
é¤å¤(Excluding)ã¨å¤å½¢(transforming): replacer
JSON.stringify ã®å®å
¨ãªæ§æã¯æ¬¡ã®éãã§ã:
let json = JSON.stringify(value[, replacer, space])
- value
- ã¨ã³ã³ã¼ãããå¤ã§ãã
- replacer
- ã¨ã³ã³ã¼ãããããããã£ã®é
åãã¾ãã¯ãããã³ã°é¢æ°
function(key, value)ã§ãã - space
- ãã©ã¼ãããã§ä½¿ãã¹ãã¼ã¹ã®æ°ã§ãã
ã»ã¨ãã©ã®ã±ã¼ã¹ã§ JSON.stringify ã¯æåã®å¼æ°ã ãã§ä½¿ç¨ããã¾ãããããã循ç°åç
§ããã£ã«ã¿ãªã³ã°ãããããªç½®æå¦çã微調æ´ããå¿
è¦ãããå ´åã¯ãJSON.stringify ã®ç¬¬2弿°ã使ç¨ã§ãã¾ãã
ããã第2弿°ã«ããããã£ã®é åãæ¸¡ããå ´åããããã®ããããã£ã ããã¨ã³ã³ã¼ãããã¾ãã
ä¾:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup 㯠room ãåç
§
};
room.occupiedBy = meetup; // room 㯠meetup ãåç
§
alert( JSON.stringify(meetup, ['title', 'participants']) );
// {"title":"Conference","participants":[{},{}]}
ããã§ã¯å³ããããããããã¾ãããããããã£ãªã¹ãã¯ããªãã¸ã§ã¯ãæ§é å
¨ä½ã«é©ç¨ããããããname ã¯ãªã¹ãã«ç¡ããparticipants ã¯ç©ºã«ãªãã¾ãã
循ç°åç
§ãå¼ãèµ·ãã room.occupiedBy ãé¤ããåããããã£ãå«ãã¾ããã:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup 㯠room ãåç
§
};
room.occupiedBy = meetup; // room 㯠meetup ãåç
§
alert( JSON.stringify(meetup, ['title', 'participants', 'place', 'name', 'number']) );
/*
{
"title":"Conference",
"participants":[{"name":"John"},{"name":"Alice"}],
"place":{"number":23}
}
*/
ããã§ãoccupiedBy ãé¤ããã¹ã¦ãã·ãªã¢ã©ã¤ãºããã¾ãããããããããããã£ã®ãªã¹ãã¯é常ã«é·ãã§ãã
幸ããªãã¨ã«ããã®ãããªå ´åã¯é
åã®ä»£ããã« replacer 颿°ã使ããã¨ãã§ãã¾ãã
颿°ã¯ãã¹ã¦ã® (key,value) ãã¢ã§å¼ã°ããâç½®æãããâ å¤ãè¿ãå¿
è¦ãããã¾ããããã¦ããã¯ãªãªã¸ãã«ã®ãã®ã®ä»£ããã«ä½¿ããã¾ãã
ç§ãã¡ã®ã±ã¼ã¹ã§ã¯ãoccupiedBy 以å¤ã®ãã¹ã¦ã âãã®ã¾ã¾ã®â value ãè¿ãã°OKã§ããoccupiedBy ãç¡è¦ãããããä¸ã®ã³ã¼ãã§ã¯ undefied ãè¿ãã¦ãã¾ã:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup 㯠room ãåç
§
};
room.occupiedBy = meetup; // room 㯠meetup ãåç
§
alert( JSON.stringify(meetup, function replacer(key, value) {
alert(`${key}: ${value}`);
return (key == 'occupiedBy') ? undefined : value;
}));
/* key:value pairs that come to replacer:
: [object Object]
title: Conference
participants: [object Object],[object Object]
0: [object Object]
name: John
1: [object Object]
name: Alice
place: [object Object]
number: 23
occupiedBy: [object Object]
*/
replacer 颿°ã¯ãã¹ãããããªãã¸ã§ã¯ããé
åã®ã¢ã¤ãã ãå«ããã¹ã¦ã® key/value ãã¢ãåå¾ãããã¨ã«çæãã¦ãã ãããå帰çã«é©ç¨ããã¾ããreplacer ã®å
å´ã§ã® this ã®å¤ã¯ç¾å¨ã®ããããã£ãå«ããªãã¸ã§ã¯ãã§ãã
æåã®å¼ã³åºãã ãç¹å¥ã§ããããã¯ç¹å¥ãª âã©ããã¼ãªãã¸ã§ã¯ãâ ({"": meetup}) ã使ã£ã¦ä½ããã¾ãã è¨ãæããã¨ãæåã® (key,value) ãã¢ã¯ç©ºã®ãã¼ãæã¡ãå¤ã¯ã¿ã¼ã²ããã®ãªãã¸ã§ã¯ãå
¨ä½ã§ãããããã訳ã§ãä¸ã®ä¾ã®æåã®è¡ã¯ ":[object Object]" ã¨ãªã£ã¦ãã¾ãã
ãã®ã¢ã¤ãã¢ã¯ãã§ããã ãå¤ãã®åã replace ãæä¾ãããã¨ã§ããå¿
è¦ã«å¿ãã¦ãªãã¸ã§ã¯ãå
¨ä½ãåæããããç½®æ/ã¹ããããããã¨ãã§ãã¾ãã
æ¸å¼è¨å®: spacer
JSON.stringify(value, replacer, spaces) ã®ç¬¬3弿°ã¯ãæ´å½¢ããããã©ã¼ãããã§ä½¿ãã¹ãã¼ã¹ã®æ°ã§ãã
以åã¯ããã¹ã¦ã®æååå(stringified)ããããªãã¸ã§ã¯ãã¯ã¤ã³ãã³ããä½åãªã¹ãã¼ã¹ãæã£ã¦ãã¾ããã§ãããããã¯ãããã¯ã¼ã¯çµç±ã§ãªãã¸ã§ã¯ããéãããã¨ãã«ã¯æ£ããã§ããspaces 弿°ã¯è¦ãããåºåããããã¨ãã«ä½¿ããã¾ãã
ãã®ä¾ã§ã¯ãspaces = 2 ã¯JavaScriptããã¹ãããããªãã¸ã§ã¯ããè¤æ°è¡ã§è¡¨ç¤ºããããã«æç¤ºãããªãã¸ã§ã¯ãã®å
å´ã¯2ã¤ã¹ãã¼ã¹ã§ã¤ã³ãã³ããã¾ã:
let user = {
name: "John",
age: 25,
roles: {
isAdmin: false,
isEditor: true
}
};
alert(JSON.stringify(user, null, 2));
/* 2ã¤ã®ã¹ãã¼ã¹ã¤ã³ãã³ã:
{
"name": "John",
"age": 25,
"roles": {
"isAdmin": false,
"isEditor": true
}
}
*/
/* JSON.stringify(user, null, 4) ã®å ´åãçµæã¯ããã¤ã³ãã³ãããããã®ã§ã:
{
"name": "John",
"age": 25,
"roles": {
"isAdmin": false,
"isEditor": true
}
}
*/
3çªç®ã®å¼æ°ãæååã«ãããã¨ãã§ãã¾ãã ãã®å ´åãæååã¯ã¹ãã¼ã¹ã®æ°ã®ä»£ããã«ã¤ã³ãã³ãã«ä½¿ç¨ããã¾ãã
spaces ãã©ã¡ã¼ã¿ã¯åã«ãã®ã³ã°ãè¦ãããåºåã®ããã ãã«ä½¿ããã¾ãã
ã«ã¹ã¿ã ã® âtoJSONâ
æåå夿ç¨ã® toString ã®ããã«ããªãã¸ã§ã¯ãã¯JSONã¸ã®å¤æç¨ã¡ã½ãã toJSON ãæä¾ãã¦ãã¾ããJSON.stringify ã¯å©ç¨å¯è½ã§ããã°ãããèªåã§å¼ã³åºãã¾ãã
ä¾:
let room = {
number: 23
};
let meetup = {
title: "Conference",
date: new Date(Date.UTC(2017, 0, 1)),
room
};
alert( JSON.stringify(meetup) );
/*
{
"title":"Conference",
"date":"2017-01-01T00:00:00.000Z", // (1)
"room": {"number":23} // (2)
}
*/
ããã§ãdate (1) ãæååã«ãªã£ã¦ããã®ãåããã¾ããããã¯ããã¹ã¦ã® date ã«ãã®ãããªç¨®é¡ã®æååãè¿ãçµã¿è¾¼ã¿ã® toJSON ã¡ã½ãããããããã§ãã
ãã¦ããªãã¸ã§ã¯ã room ã«ã«ã¹ã¿ã ã® toJSON ãè¶³ãã¦ã¿ã¾ããã:
let room = {
number: 23,
toJSON() {
return this.number;
}
};
let meetup = {
title: "Conference",
room
};
alert( JSON.stringify(room) ); // 23
alert( JSON.stringify(meetup) );
/*
{
"title":"Conference",
"room": 23
}
*/
ä¸ã®éããtoJSON 㯠JSON.stringify(room) ã®ç´æ¥å¼ã³åºãã¨ãã¹ãããããªãã¸ã§ã¯ã両æ¹ã§ä½¿ããã¾ãã
JSON.parse
JSONæååããã³ã¼ãããã«ã¯ãJSON.parse ã¨è¨ãã¡ã½ãããå¿ è¦ã§ãã
æ§æ:
let value = JSON.parse(str[, reviver]);
- str
- ãã¼ã¹ãã JSONæååã§ãã
- reviver
- å
(key,value)ãã¢ã§å¼ã°ããå¤ãå¤å½¢ãããã¨ãã§ãããªãã·ã§ã³ã®é¢æ°(function(key,value))ã§ãã
ä¾:
// æåååãããé
å
let numbers = "[0, 1, 2, 3]";
numbers = JSON.parse(numbers);
alert( numbers[1] ); // 1
次ã¯ãã¹ãããããªãã¸ã§ã¯ãã®å ´åã§ã:
let user = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }';
user = JSON.parse(user);
alert( user.friends[1] ); // 1
JSONã¯å¿ è¦ã«å¿ãã¦è¤éã«ãªããã¨ãããã¾ãããªãã¸ã§ã¯ãã¨é åã«ã¯ä»ã®ãªãã¸ã§ã¯ããé åãå«ããã¨ãã§ãã¾ãããããããããã¯å½¢å¼ã«å¾ãå¿ è¦ãããã¾ãã
ããã«ææ¸ãã®JSONã§ã®å ¸åçãªééãã示ãã¾ã(ãããã°ç®çã§æ¸ããªããã°ãªããªããã¨ãããã¾ã)ã:
let json = `{
name: "John", // 誤ã: ã¯ã©ã¼ããªãã®ããããã£å
"surname": 'Smith', // 誤ã: å¤ãã·ã³ã°ã«ã¯ã©ã¼ã (ããã«ã¯ã©ã¼ãå¿
é )
'isAdmin': false // 誤ã: ãã¼ãã·ã³ã°ã«ã¯ã©ã¼ã (ããã«ã¯ã©ã¼ãå¿
é )
"birthday": new Date(2000, 2, 3), // 誤ã: "new" ã¯è¨±å¯ããã¦ãã¾ãã, 裸ã®å¤ã®ã¿ã§ãã
"friends": [0,1,2,3] // ããã¯OKã§ã
}`;
å ãã¦ãJSONã¯ã³ã¡ã³ãããµãã¼ããã¦ãã¾ãããJSONã¸ã³ã¡ã³ãã追å ããã¨ç¡å¹ã«ãªãã¾ãã
JSON5 ã¨å¼ã°ããå¥ã®ãã©ã¼ãããããããããã¯å¼ç¨ç¬¦ã®ãªããã¼ããã³ã¡ã³ããªã©ã許å¯ããã¦ãã¾ããããããããã¯ã¹ã¿ã³ãã¢ãã¼ã³ã®ã©ã¤ãã©ãªã§ãè¨èªä»æ§ã§ã¯ããã¾ããã
æ£è¦ã®JSONã¯ããã®éçºè ãæ æ°ãªã®ã§ã¯ãªããç°¡åã§ä¿¡é ¼æ§ãããããã¤é常ã«é«éãªãã¼ã¹ã¢ã«ã´ãªãºã ã®å®è£ ãå¯è½ã«ããããã«å³æ ¼ã§ãã
ãªãã¤ãã¼(reviver)ãå©ç¨ãã
ç§ãã¡ã¯ãµã¼ããã JSONã¨ã³ã³ã¼ãããã meetup ãªãã¸ã§ã¯ããåå¾ããã¨ã¤ã¡ã¼ã¸ãã¦ãã ããã
ããã¯ãã®ããã«è¦ãã¾ã:
// title: (meetup title), date: (meetup date)
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
â¦ããã¦ä»ãJavaScriptãªãã¸ã§ã¯ãã«æ»ããããããã ãã·ãªã¢ã©ã¤ãº ããå¿ è¦ãããã¾ãã
JSON.parse ãå¼ã³åºãã¦ããããã¾ããã:
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
let meetup = JSON.parse(str);
alert( meetup.date.getDate() ); // Error!
ãã£ã¨!ã¨ã©ã¼ã§ã!
meetup.date ã®å¤ã¯æååã§ãããDate ãªãã¸ã§ã¯ãã§ã¯ããã¾ãããã©ãããã° JSON.parse ã¯ãã®æååã Date ã«å¤æãã¹ãã ã¨ç¥ããã¨ãã§ããã§ããããï¼
ãã¹ã¦ã®å¤ã âãã®ã¾ã¾â ã§è¿ãã¾ãããdate 㯠Date ã«ãªããããªå¾©å¸°é¢æ°ã JSON.parse ã«æ¸¡ãã¾ãããã:
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
let meetup = JSON.parse(str, function(key, value) {
if (key == 'date') return new Date(value);
return value;
});
alert( meetup.date.getDate() ); // åä½ãã¾ã!
ã¨ããã§ãããã¯ãã¹ãããããªãã¸ã§ã¯ãã§ãåæ§ã«åä½ãã¾ã:
let schedule = `{
"meetups": [
{"title":"Conference","date":"2017-11-30T12:00:00.000Z"},
{"title":"Birthday","date":"2017-04-18T12:00:00.000Z"}
]
}`;
schedule = JSON.parse(schedule, function(key, value) {
if (key == 'date') return new Date(value);
return value;
});
alert( schedule.meetups[1].date.getDate() ); // ãããåä½ãã¾ã!
ãµããª
- JSON ã¯ã»ã¨ãã©ã®ããã°ã©ãã³ã°è¨èªã«å¯¾ãã¦ãèªèº«ã®ç¬ç«ããæ¨æºã¨ã©ã¤ãã©ãªãæã¤ãã¼ã¿å½¢å¼ã§ãã
- JSON ã¯ãã¬ã¼ã³ãªãªãã¸ã§ã¯ããé
åãæååãæ°å¤ãçå½å¤ã
nullããµãã¼ããã¾ãã - JavaScript 㯠JSON ã«ã·ãªã¢ã©ã¤ãºããããã®ã¡ã½ãã JSON.stringify ã¨ã JSONããèªã¿è¾¼ã¿ããã JSON.parse ãæä¾ãã¾ãã
- 両ã¡ã½ããã¨ããã¹ãã¼ããªèªã¿æ¸ãã®ããã®å¤æé¢æ°ããµãã¼ããã¦ãã¾ãã
- ããããªãã¸ã§ã¯ãã
toJSONãæã£ã¦ããããJSON.stringifyããããå¼ã³åºãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã