Pythonã§JSONãæ±ãããã®æ¹æ³ã解説
WEBã·ã¹ãã äžã®ç°ãªãããã°ã©ãã³ã°èšèªéã®ããŒã¿ã®åãæž¡ãçã«çšããããèšæ³ã®ãã¡ããã£ãšã代衚çãªãã®ã«JSONããããŸãã ä»åã¯ã軜éãã€æ±ããããããšãç¹åŸŽã®JSONãPythonã§æ±ãããã®åºæ¬çãªæ¹æ³ã«ã€ããŠå®éã®ã³ãŒãã亀ããŠè§£èª¬ããŸããWEBã·ã¹ãã äžã®ç°ãªãããã°ã©ãã³ã°èšèªéã®ããŒã¿ã®åãæž¡ãçã«çšããããèšæ³ã®ãã¡ããã£ãšã代衚çãªãã®ã«JSONããããŸãã
ä»åã¯ã軜éãã€æ±ããããããšãç¹åŸŽã®JSONãPythonã§æ±ãããã®åºæ¬çãªæ¹æ³ã«ã€ããŠå®éã®ã³ãŒãã亀ããŠè§£èª¬ããŸãã
JSONãšã¯
JSONãšã¯JavaScript Object Notationã®ããšã§ãJavaScriptã®ãªããžã§ã¯ãã®è¡šèšæ³ãæå³ããŸãã WEBã·ã¹ãã äžã®ç°ãªãããã°ã©ãã³ã°èšèªéã®ããŒã¿ã®åãæž¡ãçã«çšããããŸãã
JSONã®ç¹åŸŽ
JSONã¯JavaScriptã®è¡šèšã§ã¯ãããŸããã軜éãã€æ±ããããããšããJavaScriptã«éããæ§ã ãªããã°ã©ãã³ã°èšèªã§äœ¿ãããŠãããWEBäžã«å ¬éãããŠããæ§ã ãªAPIïŒWEB APIïŒHTTPéä¿¡ã§åŒã³åºãããšã®ã§ããã¢ããªã±ãŒã·ã§ã³çã®ããšïŒãè¿åŽããçµæã®åœ¢åŒãJSON圢åŒã§æž¡ãããããšãå€ãã§ãã
ãŸãããã®èšæ³ã人éã«ãšã£ãŠçŽæçã«åããããããã®ã§ããããšããç¹åŸŽã®ã²ãšã€ã§ãã
JSONã¯ãããŒãšå€ããšãã圢åŒã®ããªãŒæ§é ã®æååã§ãããé©åã«æŽåœ¢ãããç¶æ
ã®JSONã¯ãã©ã®é
ç®ãã©ããã£ãæ§é ã«ãªã£ãŠããã®ããäžç®ã§ãããããã«ãªã£ãŠããŸãã
ããã°ã©ã ã«ãšã£ãŠãæ§é ãåæããããèšæ³ã§ããã容æã«JSONå
ã®ããŒã¿ãããã°ã©ã ã§æ±ãã圢åŒã«å€æã§ãããšããããšããJSONã®å€§ããªå©ç¹ã®ã²ãšã€ã§ãã
ãã®ããã«JSONã«ã¯æçšãšèªããããå€ãã®ç¹åŸŽãããããã®ããå€ãã®ããã°ã©ãã³ã°èšèªã§JSONãæ±ãããã®ã©ã€ãã©ãªçãæäŸãããŠããŸãã
Pythonã§JSONãæ±ãã«ã¯ïŒ
Pythonã§JSONãæ±ãããã«ã¯ãPythonæšæºã©ã€ãã©ãªã®jsonã¢ãžã¥ãŒã«ã䜿çšããŸãã
jsonã¢ãžã¥ãŒã«ã«ã¯Pythonã§JSONãæ±ãããã®æ§ã
ãªã¡ãœãããçšæãããŠãããããããå©çšããããã«jsonã¢ãžã¥ãŒã«ãã€ã³ããŒãããå¿
èŠããããŸãã
jsonã¢ãžã¥ãŒã«ã䜿ã£ãŠPythonã§JSONãæ±ã
Pythonã§JSONãæ±ãããã«ããŸã以äžã®ããã«jsonã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸãããã
import json
ããã§jsonã¢ãžã¥ãŒã«ãã€ã³ããŒããããJSONãæ±ãããã®æ§ã ãªã¡ãœããã䜿çšã§ããããã«ãªããŸãã
JSONãèªã¿èŸŒã
JSONãèªã¿èŸŒãã«ã¯å€§ããåããŠãµãã€ã®ãã¿ãŒã³ããããŸãã
ã²ãšã€ã¯ããã¡ã€ã«ããèªã¿èŸŒããã¿ãŒã³ãããã²ãšã€ã¯ããã¡ã€ã«ã§ã¯ãªãæååããèªã¿èŸŒããã¿ãŒã³ã
ã©ã¡ãã®ãã¿ãŒã³ã®èªã¿èŸŒã¿ã§ãããã«ãã£ãŠã䜿çšããã¡ãœãããå€ãããŸãã
ãªããèªã¿èŸŒãã JSONã¯ãããŒãšå€ããšãã圢åŒã§ããŒã¿ãæ±ãããšãå¯èœãªèŸæžåã«å€æãããŸãã
ãŸãããã¡ã€ã«ããèªã¿èŸŒããã¿ãŒã³ã解説ããŸãã
ãã¡ã€ã«ããèªã¿èŸŒãå Žåã«ã¯ãjson.load() ã¡ãœããã䜿çšããŸãã
# ãŸãjsonãã¡ã€ã«ãçšæããjson01.txtãšããŠä¿åããã
# {"url": "http://xxx.com", "archived_snapshots": {"closest": {"status": "200", "available": true, "url": "http://web.archive.org/web/20180807200529/http://xxx.com:80/", "timestamp": "20180807200529"}}}
# 以äžå®è¡ããã°ã©ã
# çšæããjson01.txtãèªã¿èŸŒã¿ãåºåãã
import json
with open('json01.txt') as file:
print(json.load(file))
# 以äžå®è¡çµæ
# {'url': 'http://xxx.com', 'archived_snapshots': {'closest': {'status': '200', 'available': True, 'url': 'http://web.archive.org/web/20180807200529/http://xxx.ocm:80/', 'timestamp': '20180807200529'}}}
json.load(察象ãã¡ã€ã«) ã¯åŠçã®çµæãšããŠãã¡ã€ã«ã®JSONãèŸæžåã«å€æããŠè¿åŽããŸãããã®ãšããJSONã®ããŒã¯èŸæžåã®ããŒã«ãJSONã®å€ã¯èŸæžåã®å€ãšããŠïŒã€ãŸããããŒãšå€ããšããæ§é ããã®ãŸãŸã«ããŠïŒå€æãããŸãã
ã§ãã®ã§JSONãã倿ãããèŸæžåã®è¿åŽå€ã¯ãéåžžéãèŸæžåã®å€ãæ±ãã®ãšåæ§ã«å©çšã§ããŸãã
ããã¯ã€ãŸã { âtypeâ: âhumanâ } ãšããJSONãèŸæžåã«å€æããå Žåã«ã¯ãJSONã®ããŒåãã®ãŸãŸã§ããªããžã§ã¯ã[type]ãã§å€ãâhumanâããååŸã§ãããšããããšã§ãã
次ã«ãæååããèªã¿èŸŒããã¿ãŒã³ã解説ããŸãã
ããã°ã©ã äžã«æååãšããŠååŸæžã¿ã®jsonãèªã¿èŸŒãå Žåã«ã¯ãjson.loads() ã¡ãœããã䜿çšããŸããåè¿°ã®load() ã¡ãœãããšååããã䌌ãŠããŸããããã¡ãã¯loads() ã§ãã®ã§ééããªãããæ°ãä»ããŸãããã
# 以äžå®è¡ããã°ã©ã
import json
jsonStr = '{"url": "http://xxx.com", "archived_snapshots": {"closest": {"status": "200", "available": true, "url": "http://web.archive.org/web/20180807200529/http://xxx.com:80/", "timestamp": "20180807200529"}}}'
print(json.loads(jsonStr))
# 以äžå®è¡çµæ
# {'url': 'http://xxx.com', 'archived_snapshots': {'closest': {'status': '200', 'available': True, 'url': 'http://web.archive.org/web/20180807200529/http://xxx.com:80/', 'timestamp': '20180807200529'}}}
json.loads() ã¡ãœãããåè¿°ã® json.load() ãšåæ§ã«ãèªã¿èŸŒãã jsonãèŸæžåã«å€æããŠããŸãã
ãã®ããååŸããå€ã¯èŸæžåãšããŠæ±ãããšãã§ããŸãã
JSONããã¡ã€ã«ã«åºåãã
èŸæžåã®å€ãJSONã«å€æããŠãã¡ã€ã«ã«åºåããã«ã¯ãjson.dump() ã¡ãœãããå©çšããŸãã json.dump() ã¡ãœããã䜿çšãããµã³ãã«ã³ãŒãã¯æ¬¡ã®éãã§ãã
# 以äžå®è¡ããã°ã©ã
import json
dictionary = {'url': 'http://xxx.com', 'archived_snapshots': {'closest': {'status': '200', 'available': True, 'url': 'http://web.archive.org/web/20180807200529/http://xxx.com:80/', 'timestamp': '20180807200529'}}}
# èŸæžå â JSON圢åŒã®æååã§ãã¡ã€ã«æžã蟌ã¿
with open('blank01.txt', 'w') as file: # 第äºåŒæ°ïŒwritableãªãã·ã§ã³ãæå®
json.dump(dictionary, file)
with open('blank01.txt') as file:
print(file.read())
# 以äžå®è¡çµæ
# {"url": "http://xxx.com", "archived_snapshots": {"closest": {"status": "200", "available": true, "url": "http://web.archive.org/web/20180807200529/http://xxx.com:80/", "timestamp": "20180807200529"}}}
json.dump() ã¡ãœããã®åŒæ°ã¯ãããã以äžãæå®ããŸãã
- 第äžåŒæ°ïŒå€æãã察象ã®èŸæžåã®å€ãæå®
- 第äºåŒæ°ïŒå€æããJSONæååãåºåãããã¡ã€ã«ãæå®
ãŸãããã¡ã€ã«æžãèŸŒã¿æã«ã¯withæ§æäžã®open() ã¡ãœããã«writableãªãã·ã§ã³ ('w') ãã€ããŠãã ããã writableãªãã·ã§ã³ãæå®ãããŠããªãå Žåããã¡ã€ã«ãžã®æžã蟌ã¿ã¯ç¡å¹åãããŸãã
JSONãæŽåœ¢ããŠåºåãã
åãã json.dump() ã¡ãœãããå©çšããŠãJSONãæŽåœ¢ããäžã§ãã¡ã€ã«ã«æžã蟌ãããšãã§ããŸãã
# 以äžå®è¡ããã°ã©ã
import json
dictionary = {'url': 'http://xxx.com', 'archived_snapshots': {'closest': {'status': '200', 'available': True, 'url': 'http://web.archive.org/web/20180807200529/http://xxx.com:80/', 'timestamp': '20180807200529'}}}
# èŸæžå â JSON圢åŒã®æååããæŽåœ¢ããäžã§ããã¡ã€ã«æžã蟌ã¿
with open('blank02.txt', 'w') as file: # 第äºåŒæ°ïŒwritableãªãã·ã§ã³ãæå®
json.dump(dictionary, file, indent=2) # 第äžåŒæ°ïŒã€ã³ãã³ãã®ã¹ããŒã¹æ°ãæå®
with open('blank02.txt') as file:
print(file.read())
# 以äžå®è¡çµæ
# {
# "url": "http://xxx.com",
# "archived_snapshots": {
# "closest": {
# "status": "200",
# "available": true,
# "url": "http://web.archive.org/web/20180807200529/http://xxx.com:80/",
# "timestamp": "20180807200529"
# }
# }
# }
ãã®ããã«æŽåœ¢ããŠåºåããããã«ã¯ãdump() ã¡ãœããã®ç¬¬äžåŒæ°ã«ã€ã³ãã³ãã®æå®ãããå¿
èŠããããŸãããµã³ãã«ã³ãŒãäžã§ã¯ãdump() ã®ç¬¬äžåŒæ°ã« indent=2 ãæå®ããŠããŸãã
ããæžãããšã§ãã€ã³ãã³ããã¹ããŒã¹2ã€åã§è¡ã圢åŒã§JSONãæŽåœ¢ãåºåã§ããŸãã ã€ã³ãã³ãã®ã¹ããŒã¹ã®æ°ã4ã€ã«ãããå Žåã¯ã第äžåŒæ°ã«æå®ããã€ã³ãã³ãã indent=4 ã«ããŠãã ããã
JSONããŒã¿ã«è¿œå ãã
JSONããŒã¿ã«æ°ããããŒãšå€ã®ãã¢ã远å ããã«ã¯ãããŒãæå®ããŠå€ã代å
¥ããŸãã以äžã®äŸã§ã¯ãdictionary ã«'email'ãšããããŒãšå¯Ÿå¿ããå€ã远å ããŠããŸãã
# 以äžå®è¡ããã°ã©ã
import json
dictionary = {'url': 'http://xxx.com', 'archived_snapshots': {'closest': {'status': '200', 'available': True, 'url': 'http://web.archive.org/web/20180807200529/http://xxx.com:80/', 'timestamp': '20180807200529'}}}
# ããŒã¿emailã远å
dictionary['email'] = 'staff_01@sample.com'
# èŸæžå â JSON圢åŒã®æååããæŽåœ¢ããäžã§ããã¡ã€ã«æžã蟌ã¿
with open('blank02.txt', 'w') as file: # 第äºåŒæ°ïŒwritableãªãã·ã§ã³ãæå®
json.dump(dictionary, file, indent=2) # 第äžåŒæ°ïŒã€ã³ãã³ãã®ã¹ããŒã¹æ°ãæå®
with open('blank02.txt') as file:
print(file.read())
# 以äžå®è¡çµæ
# {
"url": "http://xxx.com",
"archived_snapshots": {
"closest": {
"status": "200",
"available": true,
"url": "http://web.archive.org/web/20180807200529/http://xxx.com:80/",
"timestamp": "20180807200529"
}
},
"email": "staff_01@sample.com"
}
JSONããŒã¿ãæŽæ°ãã
æ¢åã®ããŒã®å€ãæŽæ°ããã«ã¯ãããŒãæå®ããŠæ°ããå€ã代å
¥ããŸãã
å
çšã®ããŒã¿è¿œå ã®ã³ãŒãã®éšåã«ä»¥äžã®ã³ãŒãã远å ãããšãå®è¡çµæã§ ã㌠email ã®å€ã¯ staff_02@sample.com ãšãªããŸãã
dictionary['email'] = 'staff_02@sample.com'
JSONããŒã¿ãåé€ãã
æ¢åã®ããŒã®å€ãåé€ããã«ã¯ãdel ã¡ãœããã䜿ããŸãã
å
çšã®ããŒã¿è¿œå ã®ã³ãŒãã®éšåã«ä»¥äžã®ã³ãŒãã远å ãããšãå®è¡çµæã§ ã㌠url ãšãã®å€ã¯åºåãããŸããã
del dictionary['url']
ãŸãšã
ãããŸã§ãPythonã§ã®JSONã®æ±ãæ¹ã«ã€ããŠèª¬æããŠããŸããã
ããã§ã¯äž»ã«çšæãããã¡ã€ã«ãèªã¿èŸŒãäŸãæããŸããããWeb APIããJSONããŒã¿ãååŸããPythonã§åŠçããããšãå¯èœã§ãã
ãããå¿çšããŠããŒã¿ã®èªåååŸãå€éšãµãŒãã¹ãšã®é£æºã«ã圹ç«ãŠãããšãã§ããŸãã













