JSONata é¢é£ã®æ å ±ãæ€çŽ¢ããŠããããç±³åœ IBM ã® IBM Code ãšãããµã€ãã«çããã©ãããŸãšãŸã£ã 玹ä»ããŒãž ãçºèŠããšããããèš³ããŠã¿ãŸããã
æŠèŠ
JSONata ã¯ãJSON ããŒã¿æ§é ãç §äŒããã³å€æããããã®åŒèšèªã§ããJSON(JavaScript Object Notation)ã¯ãã€ã³ã¿ãŒãããäžã®ã·ã¹ãã éã§ããŒã¿ã亀æããããã®äºå®äžã®æšæºãã©ãŒãããã«ãªãã€ã€ãããŸããTwitterãFacebookãGitHub ãªã©å€ãã®ãµã€ãã JSON ãã€ããŒãã亀æãã REST API ãæäŸããŠããŸããJSON ã®äž»ãªåŒ·ã¿ã¯ã軜éã®æ§æãšã·ã³ãã«ãªããŒã¿ã¢ãã«ã§ãããRESTful ãªWeb ãµãŒãã¹ã®äž»èŠãªãã€ããŒã圢åŒãšããŠæ®åããŠããŸãã
説æ
軜éãªããŒã¿åœ¢åŒã§ã¯ã軜éã®ã¯ãšãªãšå€ææè¡ãå¿ èŠã§ããã·ã³ãã«ãªã¯ãšãªãç°¡åã«èšè¿°ã§ããããèšèšããã JSONata ã¯ãéåžžã«æµ ãåŠç¿æ²ç·ãæã£ãŠããŸããããè€éãªè¡šçŸã¯ããã§ã«ãã¹ã¿ãŒãããŠããæŠå¿µã«èªç¶ãšåºã¥ããŠãããèšèªèšèšãšããŠé©ãã»ã©æå 端ã§ããå®å šã«æ§æå¯èœãªæŒç®åãšé¢æ°ã®ã»ããã¯ãåŒå ã«æ°ãã颿°ãå®çŸ©ããæ©èœãå«ãã§ãããããŒã¿å€æã¿ã¹ã¯ã®è€éãã«å¶éã¯ãããŸããã
JSONata ã¯ãXPath ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåãããã±ãŒã·ã§ã³ãã¹ã®ã»ãã³ãã£ã¯ã¹ãXQuery ããã€ã³ã¹ãã€ã¢ããã JSON æ§é ã«åºåããã©ãŒãããããæ©èœãScheme ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåãã颿°åããã°ã©ãã³ã°ã¢ãã«ã«ãã£ãŠæ¯ããããŠããŸãã
XPath ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåãããã±ãŒã·ã§ã³ãã¹:
- æ§é å ã®å€ãéžæããããã®ã·ã³ãã«ã§çŽæçãªæ§æ
- è€éãªã¯ãšãªãšããŒã¿çµåã®ããã®åŒ·åãªè¿°èªã¡ã«ããºã
- ããŒã¿ãæäœããã³éèšããããã®çµã¿èŸŒã¿é¢æ°ããã³æŒç®å
XQuery ããã€ã³ã¹ãã€ã¢ããã JSON æ§é ã«åºåããã©ãŒãããããæ©èœ:
- æ°ãããªããžã§ã¯ããšé åã®æ§ç¯ã«äœ¿çšãããæšæº JSON æ§æ
- æå¹ãª JSON ããŒã¿ã¯æå¹ãª JSONata åŒã§ãããããš
- ãã³ãã¬ãŒãã¹ã¿ã€ã«ã®ã¯ãšãªãæ§ç¯ã§ãã
Scheme ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåãã颿°åããã°ã©ãã³ã°ã¢ãã«:
- SICP ã«èšè¿°ãããŠãããã¡ã¿åŸªç° è©äŸ¡åš(metacircular evaluator)ããå®è£
- ãŠãŒã¶ãŒå®çŸ©é¢æ°(ã¯ããŒãžã£)ããµããŒã
- ãã¥ãŒãªã³ã°å®å šã§ãã
ã©ã³ã¿ã€ã ããã»ããµã®è»œéåã«ãããWeb ãã©ãŠã¶ãããã±ãŒãžäŸåé¢ä¿ã®ãªã Node.js ã¢ãžã¥ãŒã« ãšããŠåäœãããããšãã§ããŸãã
ãããžã§ã¯ããžã®è²¢ç®
倿°ã® JSON ãã¹æ§æããããŸããä»ã«å¿ èŠã§ããïŒ XPath ã®ææ°ããŒãžã§ã³ãåãªã XML ããã²ãŒã·ã§ã³æ§æä»¥äžã®ãã®ã§ãããšåãæå³ã§ãJSONata ã¯åãªã JSON ããã²ãŒã·ã§ã³æ§æä»¥äžã®ãã®ã§ãããã®èšèªã¯ãæŽç·Žãããæ©èœçãªèšç®ãšã³ãžã³ã§ç°¡åã«ã¯ãšãªæ§æãæ¡åŒµããŸããJSONata ã䜿çšããã°ãè€éãªå€æã®åé¡ã§ã³ãŒããæŸæ£ããŠãå¥ã®èšèªã«åãæ¿ããå¿ èŠã¯ãªããªãã§ãããã
JSONata ãããžã§ã¯ãã«è²¢ç®ããæ¹æ³ã¯å¹Ÿã€ããããŸãããç¹ã«çµã¿èŸŒã¿é¢æ°ã©ã€ãã©ãªã®éçºã§è²¢ç®ã§ããŸãããŸããCãRubyãPythonã.NETãSwift ãªã©ä»ã®èšèªç°å¢ã§ JSONata ã©ã³ã¿ã€ã ãå®è£ ããã«ã¯ãå€ãã®äœæ¥ãå¿ èŠã§ãã
ã©ã®ãããªæè¡çåé¡ã解決ããã®ã«åœ¹ç«ã€ã§ããããïŒ
å¯èœæ§ãç§ãã巚倧㪠JSON æ§é ã«åãããŠãããæå³ã®ããããŒã¿ãæãåºãããšããã®ããŒã«ã®æ¬è³ªã§ããJSONata 㯠JSON ããŒã¿ã®ã¯ãšãªãšå€æãå«ãããããåé¡ã«é©çšã§ããŸããããŒã¿æœåºã¿ã¹ã¯ãã©ãã»ã©è€éã§ãã£ãŠããJSONata èšèªã§è¡šçŸãå®è¡ã§ããŸãã
JSONata ã¯ã©ã®ããã«ç§ã®ããžãã¹ã«åœ¹ç«ã¡ãŸããïŒ
IT éšéããåŸã JSON ããŒã¿ãã¯ãšãªããŠããããå¶æ¥ã®å°éå®¶ã®æã«æž¡ããŸããè€éãªã¯ãšãªããããã°ã©ãã³ã°èšèªã®å°éç¥èãªãã«èšè¿°ããããšãã§ããŸãã
ãããã¯ãšãªã®ã³ã³ãã¯ããªæ§è³ªã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§ JSONata åŒãã·ã³ã°ã«ã©ã€ã³ã»ããããã£ãšããŠäœæã§ããããšãæå³ããŸãã軜éã§ãã©ãŠã¶ã«åªããå®è£ ã«ããããŠãŒã¶ãŒã¯ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããå€éšã¯ã©ãŠããµãŒãã¹ãåŒã³åºãããšãªããè¿ éã«æ å ±ãæ¢çŽ¢ãæœåºããããšãã§ããŸãã
JSONata 1.2 ã®æ°æ©èœ
å ããŒãžãããªã³ã¯ãããŠãã JSONata 1.2 adds more power to your queries ãšããããã°èšäºãäžç·ã«èš³ããŠãããŸãã2017幎6æ5æ¥æŽæ°ã®å€ãèšäºã§ãããç¥ããªãæ©èœã ã£ãã®ã§ãããªãã èš³ããããã¥ã¢ã«å€ãã®ããªw
æŠèŠ
JSONata ã®ã¯ãšãªãšå€æèšèªã®ããŒãžã§ã³1.2ãçºè¡šããŠèªãã«æã£ãŠããŸããJSONata 㯠JSON ããŒã¿ãæœåºãæäœããããã®ãªãŒãã³ãœãŒã¹ã®å®£èšåèšèªã§ã ããã«ã¯ãè¿°éšããŒã¹ã®ç §äŒãã°ã«ãŒãåãéçŽãçµææ§é ã®ãã©ãŒãããã®ããã®ãã¡ãŒã¹ãã¯ã©ã¹ã®æ§æãå«ãŸããŠããŸãã
ããŒãžã§ã³1.2ã§ã¯ãçµã¿èŸŒã¿é¢æ°ãããã€ã远å ããŠãã¯ãšãªçµæãäžŠã¹æ¿ããããã®æ§æã远å ããŸããããŸããéåæé¢æ°ããã©ã°ã€ã³ããããã®ãµããŒãã远å ãããNode.js ãšã³ã·ã¹ãã ã§ããè¯ãæ¯ãèããã§ããããã«ãªããŸããã
æ°ãã âorder-byâ æ§æ
ãã®æ°ããæ§æã䜿çšãããšãã¯ãšãªã®çµæãäžŠã¹æ¿ããæ¹æ³ãæå®ã§ããŸããããããªããã°ãã¯ãšãªã®çµæã¯ããã¥ã¡ã³ãã®é åºã§ããŸãã¯å ¥å JSON ã«è¡šç€ºãããé åºã§è¿ãããŸãã
ãã®æ°ããæ§æã䜿çšãããšã1ã€ãŸãã¯è€æ°ã®ãœãŒãæ¡ä»¶ã«åŸã£ãŠçµæãäžŠã¹æ¿ããããšãã§ããŸãããããã®çšèªã¯ãåçŽãªããããã£åç §ããè€éãªåŒã«è³ããŸã§ã®ãããããã®ã§ããããšãã°ãäŸ¡æ Œã®äœãé ã«äžŠã¹ããã幎霢ã®é«ãé ã«äžŠã¹ãããããŒã¿ããæœåºã§ããä»ã®ææšã䜿çšããŠãã¯ãšãªã§äžŠã³é ãèšå®ããããšãã§ããŸãã
äŸãã°ãAccount.Order.Product^(>Price, <Quantity) ã¯ãProduct ãåºåããŸããã䞊ã³é 㯠Price ã§éé ãã〠Quantity ã§æé ã®äžŠã³ã«ãªããŸãã
æ°ãã颿°
ãã®ææ°ãªãªãŒã¹ã«ã¯å€ãã®æ°æ©èœã远å ãããŸãããååã® JSONata ã®ãªãªãŒã¹ã«ã¯ãæååããŒã¿ãåŠçããåªããæ©èœãå«ãŸããŠããŸããã
ãã®ãªãªãŒã¹ã§ã¯ãä»ã® JSON ããŒã¿åã远å ããŸããããã®ãªãªãŒã¹ã§ã¯ãæ°å€ãé åããªããžã§ã¯ããåŠçããããã®æ°ãã颿°ã倿°çšæãããŠãããçµã¿èŸŒã¿é¢æ°ã®ç·æ°ã¯ 45 ã«ãªããŸããããã¡ãããJSONata ã JavaScript ã§é¢æ°ã©ã€ãã©ãªããã€ã§ãæ¡åŒµããããšãã§ããŸãã
éåæé¢æ°ã®ãµããŒã
æåãããJavaScript éçºè ã¯ãåžžã«çµã¿èŸŒã¿é¢æ°ã©ã€ãã©ãªãç¬èªã®é¢æ°ã§æ¡åŒµããããšãã§ããŸãããããã颿°ã®éçºè ã¯ãæ©èœããããã¯ãããªãããã«ããå¿ èŠããããŸãããã€ãŸããJSONata ã«å¶åŸ¡ãæ»ãåã«ãäœãä»ã®ããšãèµ·ããã®ãåŸ ã€ããšãé£ããã£ãã®ã§ãã
ããã¯ãæ¡åŒµæ©èœãå€éšã·ã¹ãã ãžã® HTTP èŠæ±ãããããããããªãçŸä»£ã®ãã€ã¯ããµãŒãã¹ã®äžçã§ã¯ããŸããããŸãããããŒãžã§ã³1.2ã§ã¯ãPromise ãè¿ãæ¡åŒµé¢æ°ãæžãããšãã§ããJSONata ãšã³ãžã³ãå¶åŸ¡ãè¡ããå€éšã·ã¹ãã ãçµæãè¿ããšåŠçãéå§ããããšãã§ããŸãã
ãããã«
ããããçãã§ããå°æ°å³ãã JSONata ã«ã€ããŠèª¬æãããããŒãžã§ãããJSONata é¢é£ã§ã¯ä»ã«ãæ å ±ã翻蚳ããŠããŸãã®ã§ãèå³ããã£ããèªãã§ã¿ãŠãã ããã
- Node-RED ã® change/switch ããŒãã§äœ¿ãã JSONata ã® README.md ãèš³ããŠã¿ã
- JSONata ã®èšèªã¬ã€ããèš³ããŠã¿ã
ã§ã¯ã§ã¯ïŒ
