{"id":9894,"date":"2013-10-12T14:58:48","date_gmt":"2013-10-12T12:58:48","guid":{"rendered":"http:\/\/flaven.fr\/?p=9894"},"modified":"2013-10-12T15:01:03","modified_gmt":"2013-10-12T13:01:03","slug":"mustache-templating-library-jquery-json-utiliser-mustache-comme-systeme-de-template-javascript-pour-une-api-sortant-des-flux-json","status":"publish","type":"post","link":"https:\/\/flaven.fr\/2013\/10\/mustache-templating-library-jquery-json-utiliser-mustache-comme-systeme-de-template-javascript-pour-une-api-sortant-des-flux-json\/","title":{"rendered":"Mustache, Templating library, jQuery, JSON &#8211; Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON"},"content":{"rendered":"<p><!--  Mustache, Templating library, jQuery, JSON - Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON  --><br \/>\n\t<!--  Mustache, Templating library, jQuery, JSON, UX, Agile, Chrome, Frirefox, Console, Omnigraffle, Balsamiq, wireframe, Axure, Photoshop, IHM, Ecran, UX, API --><\/p>\n<p>Dans un pr\u00e9c\u00e8dent billet, on avait vu comment utiliser le plugin de jQuery Template pour se faciliter le travail de g\u00e9n\u00e9ration de pages\/\u00e9crans\/IHM depuis des flux JSON. En effet, pour faire valider des \u00e9crans par le m\u00e9tier, mieux vaut pr\u00e9senter un aper\u00e7u intuitif dans le m\u00eame esprit qu&#8217;une maquette Photoshop ou d&#8217;un wireframe fait avec des outils comme Axure, Balsamiq ou Omnigraffle. A la diff\u00e9rence, que l&#8217;exercice peut se r\u00e9v\u00e9ler p\u00e9rilleux car cette fois-ci les pages ne sont pas statiques comme sur une maquette HTML mais vont \u00eatre aliment\u00e9s par de v\u00e9ritable contenu \u00e9manant d&#8217;un API sous la forme des flux JSON. Il faut entendre par le m\u00e9tier : un client, un responsable marketing digital, un responsable \u00e9ditorial, un DA&#8230;<\/p>\n<p><b>C&#8217;est l\u00e0 o\u00f9 le recours \u00e0 un framework javascript de g\u00e9n\u00e9ration de template peut-\u00eatre d&#8217;une grande aide. C&#8217;est en ce sens que nous allons utiliser <code>Mustache - Templating library<\/code><\/b><\/p>\n<h4>JSON vs IHM<\/h4>\n<p>On ne va pas faire valider des flux JSON quand bien m\u00eame ces flux peuvent \u00eatre mis en forme par une extension comme JSONview et sont le &#8220;coeur&#8221; de la g\u00e9n\u00e9ration des \u00e9crans. C&#8217;est tout le foss\u00e9 presque culturelle qui existe entre le monde du d\u00e9veloppement et d&#8217;autres d\u00e9partements (marketing, \u00e9ditorial, design) qui travaillent aussi \u00e0 la cr\u00e9ation d&#8217;une application ou d&#8217;un site. Mieux vaut une repr\u00e9sentation UX (des \u00e9crans) des r\u00e8gles fonctionnelles, compr\u00e9hensibles par tous.<\/p>\n<p>Pour se rendre compte du foss\u00e9 entre les flux JSON et de v\u00e9ritables IHM, deux captures suffisent, l&#8217;une du flux JSON brut, l&#8217;autre de l&#8217;\u00e9cran, rapidement maquett\u00e9 \u00e0 l&#8217;aide de Mustache de ce m\u00eame flux.<\/p>\n<p><b>Chargement non-UX du flux JSON \u00e0 l&#8217;aide de JSONview<\/b><br \/>\n  <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/json_mustache_non_ux_2.jpg\" alt=\"Mustache, Templating library, jQuery, JSON - Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON\" width=\"500\" height=\"313\"><\/p>\n<p><b>Chargement UX du m\u00eame flux JSON \u00e0 l&#8217;aide de Mustache<\/b><br \/>\n  <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/json_mustache_ux_1.jpg\" alt=\"Mustache, Templating library, jQuery, JSON - Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON\" width=\"500\" height=\"313\"><\/p>\n<p><b>Dans notre article, on ne sert de Mustache que comme d&#8217;un outil v\u00e9loce de maquettage pour des flux JSON mais cela va sans dire <code>Mustache<\/code> peut-\u00eatre aussi la solution choisie, en production, pour g\u00e9n\u00e9rer v\u00e9ritablement les \u00e9crans.<\/b><\/p>\n<p>Comme dans l&#8217;article pr\u00e9c\u00e8dent, une pr\u00e9cision s&#8217;impose, vous pourriez rencontrer un probl\u00e8me lorsque vous essayez de lire le document JSON qui alimente vos \u00e9crans si vous ne mettez pas ce code sur un serveur. En effet, pour des raisons de s\u00e9curit\u00e9 un navigateur comme Google Chrome ne permet pas de charger des fichiers externes sur les dossiers locaux. Si vous devez charger un fichier .json en local, le mieux est donc d\u2019utiliser firefox, safari ou tout simplement charger le fichier appelant la source de donn\u00e9es au format .json sur un serveur en local type WAMP, MAMP ou EASYPHP.<\/p>\n<h4>Utiliser mustache pour rendre un flux JSON<\/h4>\n<p>Dans notre template, on se montre volontairement prolixe pour ce qui est des boucles pour \u00eatre s\u00fbr de savoir ce qui est effectivement appeller depuis le <code>JSON<\/code><\/p>\n<p><b>OUTPUT &#8211; Le rendu du flux JSON \u00e0 l&#8217;aide de Mustache<\/b><br \/>\n  <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/json_mustache_complex_3.jpg\" alt=\"Mustache, Templating library, jQuery, JSON - Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON\" width=\"500\" height=\"313\"><\/p>\n<p>  <b>INPUT &#8211; La source du flux JSON, relativement complexe.<\/b><br \/>\n    <img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/json_mustache_complex_source_4.jpg\" alt=\"Mustache, Templating library, jQuery, JSON - Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON\" width=\"500\" height=\"313\"><\/p>\n<p><b>D\u00e9tails du template de mustache<\/b><\/p>\n<pre lang=\"javascript\" escaped=\"true\">\r\n  \r\n  &lt;script id=\"content-template\" type=\"text\/template\"&gt;\r\n\r\n  &lt;ol&gt;\r\n  \t{{#result}}\r\n  \t\t{{#people}}\r\n  \t\t\t{{#person}}\r\n        &lt;li&gt;\r\n  \t\t\t{{#image}}\r\n  \t\t\t\t\t\t\t\t{{#code}}\r\n  \t\t\t\t\t\t\t\tIMG ({{code}}) =&gt; &lt;img src=\"{{url}}\" \/&gt;&lt;br&gt;\r\n  \t\t\t\t\t\t\t\t{{\/code}}\r\n  \t\t\t\t\t\t\t\t{{^code}}\r\n  \t\t\t\t\t\t\t\tno img\r\n  \t\t\t\t\t\t\t\t{{\/code}}\r\n  \t\t\t{{\/image}}\r\n\r\n\r\n  \t\t\t\tTITLE =&gt; &lt;a href=\"{{url}}\/\" title=\"{{title}}\"&gt;{{title}} &lt;\/a&gt;\r\n  \t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n\r\n  \t\t\t\t\tBODY escaped HTML =&gt; {{{body}}}\r\n  \t\t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n  \t\t\t\t\tBODY unescaped HTML =&gt; {{body}}\r\n  \t\t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n            TAXONOMY =&gt; \r\n  \t\t\t\t\t\t{{#taxonomy}}\r\n  \t\t\t\t\t\t\t{{#tags}}\r\n  \t\t\t\t\t\t\t\t&lt;span class=\"tag\"&gt;&lt;a class=\"no-decoration\" href=\"{{tid}}\"&gt;{{name}} ({{tid}})&lt;\/a&gt;&lt;\/span&gt;\r\n  \t\t\t\t\t\t\t{{\/tags}}\r\n  \t\t\t\t\t\t{{\/taxonomy}}\r\n  \t\t\t    &lt;br&gt;\r\n  \t\t\t    GEOLOC =&gt; \r\n        \t\t{{#geoloc}}\r\n        \t\t  LAT, LONG =&gt; ({{latitude}}, {{longitude}})\r\n        \t\t  &lt;br&gt;\r\n        \t\t      {{#address}}\r\n                                 GEOLOC =&gt; CITY, COUNTRY =&gt; &lt;span class=\"tag\"&gt;{{locality}} -[{{country}}]&lt;\/a&gt;&lt;\/span&gt;&lt;br&gt;\r\n              \t\t{{\/address}}\r\n        \t\t{{\/geoloc}}\r\n        &lt;\/li&gt;\r\n  \t\t\t{{\/person}}\r\n  \t\t{{\/people}}\r\n  \t{{\/result}}\r\n  &lt;\/ol&gt;\t\r\n\r\n  \t&lt;\/script&gt;\r\n  \r\n<\/pre>\n<p>Pour comprendre la fonctionnement du template, beaucoup d&#8217;information sont disponibles sur le site de mustache de github.<\/p>\n<p>Source : <a href=\"http:\/\/mustache.github.io\/mustache.5.html\" target=\"_blank\">http:\/\/mustache.github.io\/mustache.5.html<\/a><\/p>\n<p>Par exemple <code>BODY => {{{body}}}<\/code> fait que mustache va interpr\u00e9ter les balises html de la variable du JSON <code>body<\/code>.<\/p>\n<h4>Tous les \u00e9l\u00e9ments pour faire fonctionner l&#8217;ensemble<\/h4>\n<p>Il y un fichier HTML, CSS, un fichier JS et des fichiers JSON qui sont la source de donn\u00e9es. On a plac\u00e9 le tout dans diff\u00e9rents r\u00e9pertoires : assets, css, js, json. On a intentionnellement mis deux fichiers JSON de source de donn\u00e9s assez compliqu\u00e9s pour v\u00e9ritablement simuler le fonctionnement d&#8217;une API qui remonte des donn\u00e9s complexes et pas seulement 3 donn\u00e9es qui se battent en duel !<\/p>\n<blockquote><p> Tous les fichiers de cet article sont dans le fichier <code>.zip<\/code> : <a href=\"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/_mustache_example_4.zip\" target=\"_blank\">_mustache_example_4.zip<\/a><\/p>\n<\/blockquote>\n<p><b>Le style avec <code>good_all_style.css<\/code><\/b><\/p>\n<pre lang=\"css\">\r\n  \/* #General\r\n  ================================================== *\/\r\n\r\n  body {\r\n  \tpadding: 10px;\r\n  \tmargin: 20px;\r\n  \tfont-size: 14px;\r\n  }\r\n  body * {\r\n  \t-webkit-font-smoothing: antialiased !important;\r\n  \ttext-rendering: optimizelegibility;\r\n  }\r\n  a {\r\n  \ttransition: all 0.2s ease-in-out;\r\n  \t-moz-transition: all 0.2s ease-in-out;\r\n  \t-webkit-transition: all 0.2s ease-in-out;\r\n  \t-o-transition: all 0.2s ease-in-out;\r\n  }\r\n  body, h1, h2, h3, h4, h5, h6 {\r\n  \tfont-family: \"Myriad Pro\", Arial, Helvetica, Tahoma, sans-serif;\r\n  \tfont-weight: 300;\r\n  }\r\n  h1 {\r\n  \tfont-size: 30px;\r\n  \tline-height: 42px;\r\n  }\r\n  h2 {\r\n  \tfont-size: 24px;\r\n  \tline-height: 32px;\r\n  }\r\n  h3 {\r\n  \tfont-size: 18px;\r\n  \tline-height: 24px;\r\n  \tfont-weight: normal;\r\n  \tmargin-bottom: 15px;\r\n  }\r\n  h4 {\r\n  \tfont-size: 16px;\r\n  \tfont-weight: normal;\r\n  \tline-height: 20px;\r\n  \tmargin-bottom: 15px;\r\n  }\r\n  h5 {\r\n  \tfont-size: 14px;\r\n  \tfont-weight: bold;\r\n  \tline-height: 18px;\r\n  \tmargin-bottom: 15px;\r\n  }\r\n  h6 {\r\n  \tfont-size: 12px;\r\n  \tfont-weight: bold;\r\n  \tline-height: 16px;\r\n  \tmargin-bottom: 10px;\r\n  \ttext-transform: uppercase;\r\n  }\r\n  p {\r\n  \tfont-size: 14px;\r\n  \tline-height: 170%;\r\n  }\r\n  p:empty {\r\n  \t\/*display: none;\r\n  \tmargin-bottom: 0;*\/\r\n  }\r\n  a.list {\r\n  \t\/*color: #F6177B;*\/\r\n  \tcolor: #000;\r\n  \ttext-decoration: none;\r\n  \toutline: none;\r\n  }\r\n  span.tag a {\r\n  \t\/*color: #F6177B;*\/\r\n  \tcolor: #999999;\r\n  \ttext-decoration: none;\r\n  \toutline: none;\r\n  }\r\n  \r\n<\/pre>\n<p><b>Le code JS qui permet de charger les diff\u00e9rents fichiers json <code>main_mustache_complex.js<\/code><\/b><\/p>\n<pre lang=\"javascript\">\r\n  function sample_1 () {\r\n  \t  \t\tvar product_name ='json\/G_data_sample_utf8_complex_1.json';\r\n    \t\t\t\t$.getJSON(''+product_name+'', function(data) {\t\r\n  \t\t    \tvar template = $('#content-template').html();\r\n  \t\t    \tvar info = Mustache.to_html(template, data);\r\n  \t\t    $('#PersonNewsFeed').html(info);\r\n  \t\t\t});\r\n  \t\tconsole.log(\"product_name =&gt; \"+product_name+\"\\n\");\r\n  \t}\r\n\r\n  \tfunction sample_2 () {\r\n  \t\t  \t\tvar product_name ='json\/G_data_sample_utf8_complex_2.json';\r\n  \t  \t\t\t\t$.getJSON(''+product_name+'', function(data) {\t\r\n  \t\t\t    \t\tvar template = $('#content-template').html();\r\n  \t\t\t    \t\tvar info = Mustache.to_html(template, data);\r\n  \t\t\t    \t$('#PersonNewsFeed').html(info);\r\n  \t\t\t\t});\r\n  \t\t\tconsole.log(\"product_name =&gt; \"+product_name+\"\\n\");\r\n  \t}\r\n\r\n  \r\n  \r\n<\/pre>\n<p><b>Le premier fichier de source de donn\u00e9es <code>G_data_sample_utf8_complex_1.json<\/code> charg\u00e9 par la fonction <code>sample_1<\/code><\/b><\/p>\n<pre lang=\"javascript\">\r\n  { \r\n  \"encoding\" : \"UTF-8\",\r\n    \"result\": {\r\n      \"people\": {\r\n                \"person\": [\r\n                       \r\n                      { \"firstname\": \"Alikaou\",\r\n                    \t\t\"lastname\": \"Camara\",\r\n                    \t\t\"title\": \"The Soninke diaspora workers\",\r\n                    \t\t\"image\": [\r\n                          {\r\n                            \"code\": \"256x256\",\r\n                            \"url\": \"assets\/userphoto\/alikaou_soninke.jpg\"  \r\n                          }],\r\n                    \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\"taxonomy\": [\r\n                          {\r\n                            \"vid\": \"1_D890_3\",\r\n                            \"tags\": [\r\n                              {\r\n                                \"tid\": \"1_D75_9\",\r\n                                \"name\": \"Africa\"\r\n                              }\r\n                            ]\r\n                          },\r\n                          {\r\n                            \"vid\": \"1_D890_1\",\r\n                            \"tags\": [\r\n                              {\r\n                                \"tid\": \"1_D75_639\",\r\n                                \"name\": \"Mali\"\r\n                              },\r\n                              {\r\n                                \"tid\": \"1_D75_3949\",\r\n                                \"name\": \"Barack Obama\"\r\n                              }\r\n                            ]\r\n                          }\r\n                        ],\r\n                        \r\n                        \"geoloc\": {\r\n                          \"latitude\": \"12.650000\",\r\n                          \"longitude\": \"-8.000000\",\r\n                          \"bounds\": {\r\n                            \"northeast\": {\r\n                              \"latitude\": \"12.732974\",\r\n                              \"longitude\": \"-7.875945\"\r\n                            },\r\n                            \"southwest\": {\r\n                              \"latitude\": \"12.490909\",\r\n                              \"longitude\": \"-8.115081\"\r\n                            }\r\n                          },\r\n                          \"address\": {\r\n                            \"thoroughfare\": \"\",\r\n                            \"postalcode\": \"\",\r\n                            \"locality\": \"Bamako\",\r\n                            \"subadminarea\": \"Bamako\",\r\n                            \"adminarea\": \"Bamako\",\r\n                            \"country\": \"ML\"\r\n                          }\r\n                        }\r\n                        \r\n                        \r\n                        \r\n                    \t},\r\n\r\n                    \t{ \"firstname\": \"Robert Herbert\",\r\n                    \t\t\"lastname\": \"Appel\",\r\n                    \t\t\"title\": \"A Concise History of Modern Painting\",\r\n                    \t\t\"image\": [\r\n                          {\r\n                            \"code\": \"256x256\",\r\n                            \"url\": \"assets\/userphoto\/Modern-Painting-Herbert.jpg\"  \r\n                          }],\r\n                    \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\t\"taxonomy\": [\r\n                            {\r\n                              \"vid\": \"1_D430_3\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D89_2\",\r\n                                  \"name\": \"South America\"\r\n                                }\r\n                              ]\r\n                            },\r\n                            {\r\n                              \"vid\": \"1_D430_1\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D89_210\",\r\n                                  \"name\": \"Brasil\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_2902\",\r\n                                  \"name\": \"Dilma Rousseff\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_3794\",\r\n                                  \"name\": \"Pope Fran\u00e7ois\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_790\",\r\n                                  \"name\": \"Da Vinci\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_1601\",\r\n                                  \"name\": \"Religion\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_731\",\r\n                                  \"name\": \"Vatican\"\r\n                                }\r\n                              ]\r\n                            }\r\n                          ],\r\n                          \"geoloc\": {\r\n                            \"latitude\": \"-22.903539\",\r\n                            \"longitude\": \"-43.209587\",\r\n                            \"bounds\": {\r\n                              \"northeast\": {\r\n                                \"latitude\": \"-22.749045\",\r\n                                \"longitude\": \"-43.099382\"\r\n                              },\r\n                              \"southwest\": {\r\n                                \"latitude\": \"-23.08302\",\r\n                                \"longitude\": \"-43.795449\"\r\n                              }\r\n                            },\r\n                            \"address\": {\r\n                              \"thoroughfare\": \"\",\r\n                              \"postalcode\": \"\",\r\n                              \"locality\": \"Rio de Janeiro\",\r\n                              \"subadminarea\": \"\",\r\n                              \"adminarea\": \"Rio de Janeiro\",\r\n                              \"country\": \"BR\"\r\n                            }\r\n                          }\r\n                    \t\t\r\n                    \t},\r\n                    \t\r\n                    \t{ \"firstname\": \"Youssef\",\r\n                    \t\t\"lastname\": \"Touieb\",\r\n                    \t\t\"title\": \"History of the Muslim Brotherhood in Egypt\",\r\n                    \t\t\"image\": [\r\n                          {\r\n                            \"code\": \"256x256\",\r\n                            \"url\": \"assets\/userphoto\/Youssef-Touieb-Selbstbildnis.jpg\"  \r\n                          }],\r\n                    \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\t\"taxonomy\": [\r\n                            {\r\n                              \"vid\": \"1_D670_3\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D64_3\",\r\n                                  \"name\": \"Middle East\"\r\n                                }\r\n                              ]\r\n                            },\r\n                            {\r\n                              \"vid\": \"1_D670_1\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D94_579\",\r\n                                  \"name\": \"Egypt\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D94_3942\",\r\n                                  \"name\": \"Moubarak\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D94_3599\",\r\n                                  \"name\": \"Mohamed Morsi\"\r\n                                }\r\n                              ]\r\n                            }\r\n                          ],\r\n                          \"geoloc\": {\r\n                            \"latitude\": \"30.044420\",\r\n                            \"longitude\": \"31.235712\",\r\n                            \"bounds\": {\r\n                              \"northeast\": {\r\n                                \"latitude\": \"30.110602\",\r\n                                \"longitude\": \"31.301973\"\r\n                              },\r\n                              \"southwest\": {\r\n                                \"latitude\": \"30.009228\",\r\n                                \"longitude\": \"31.222067\"\r\n                              }\r\n                            },\r\n                            \"address\": {\r\n                              \"thoroughfare\": \"\",\r\n                              \"postalcode\": \"\",\r\n                              \"locality\": \"Cairo\",\r\n                              \"subadminarea\": \"\",\r\n                              \"adminarea\": \"Cairo Governorate\",\r\n                              \"country\": \"EG\"\r\n                            }\r\n                          }\r\n                    \t\t\r\n                    \t}\r\n                      \r\n                       \r\n                       \r\n                          ]\r\n                }\r\n          }\r\n    }\r\n  \r\n<\/pre>\n<p><b>Le deuxi\u00e8me fichier de source de donn\u00e9es <code>G_data_sample_utf8_complex_1.json<\/code> charg\u00e9 par le fonction <code>sample_2<\/code><\/b><\/p>\n<pre lang=\"javascript\">\r\n  { \r\n  \"encoding\" : \"UTF-8\",\r\n    \"result\": {\r\n      \"people\": {\r\n                \"person\": [\r\n                       \r\n                      { \"firstname\": \"Youssef\",\r\n                    \t\t\"lastname\": \"Wara\",\r\n                    \t\t\"title\": \"Ougao vs Disney\",\r\n                    \t\t\"image\": [\r\n                          {\r\n                            \"code\": \"256x256\",\r\n                            \"url\": \"assets\/userphoto\/youssef_wara.jpg\"  \r\n                          }],\r\n                    \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\r\n                    \t\t\r\n                    \t\t\"taxonomy\": [\r\n                          {\r\n                            \"vid\": \"1_D890_3\",\r\n                            \"tags\": [\r\n                              {\r\n                                \"tid\": \"1_D75_9\",\r\n                                \"name\": \"Africa\"\r\n                              }\r\n                            ]\r\n                          },\r\n                          {\r\n                            \"vid\": \"1_D890_1\",\r\n                            \"tags\": [\r\n                              {\r\n                                \"tid\": \"1_D75_639\",\r\n                                \"name\": \"Kenya\"\r\n                              },\r\n                              {\r\n                                \"tid\": \"1_D75_3949\",\r\n                                \"name\": \"Tanzanie\"\r\n                              }\r\n                            ]\r\n                          }\r\n                        ],\r\n                        \r\n                        \"geoloc\": {\r\n                          \"latitude\": \"12.650000\",\r\n                          \"longitude\": \"-8.000000\",\r\n                          \"bounds\": {\r\n                            \"northeast\": {\r\n                              \"latitude\": \"12.732974\",\r\n                              \"longitude\": \"-7.875945\"\r\n                            },\r\n                            \"southwest\": {\r\n                              \"latitude\": \"12.490909\",\r\n                              \"longitude\": \"-8.115081\"\r\n                            }\r\n                          },\r\n                          \"address\": {\r\n                            \"thoroughfare\": \"\",\r\n                            \"postalcode\": \"\",\r\n                            \"locality\": \"Bamako\",\r\n                            \"subadminarea\": \"Bamako\",\r\n                            \"adminarea\": \"Bamako\",\r\n                            \"country\": \"ML\"\r\n                          }\r\n                        }\r\n                        \r\n                        \r\n                        \r\n                    \t},\r\n\r\n                    \t{ \"firstname\": \"Moshe\",\r\n                    \t\t\"lastname\": \"Dunlop\",\r\n                    \t\t\"title\": \"Chess theory\",\r\n                    \t\t\"image\": [\r\n                          {\r\n                            \"code\": \"256x256\",\r\n                            \"url\": \"assets\/userphoto\/Moshe-Dunlop.jpg\"  \r\n                          }],\r\n                    \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\r\n                    \t\t\t\"taxonomy\": [\r\n                            {\r\n                              \"vid\": \"1_D430_3\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D89_2\",\r\n                                  \"name\": \"South America\"\r\n                                }\r\n                              ]\r\n                            },\r\n                            {\r\n                              \"vid\": \"1_D430_1\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D89_210\",\r\n                                  \"name\": \"Brasil\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_2902\",\r\n                                  \"name\": \"Dilma Rousseff\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_3794\",\r\n                                  \"name\": \"Pope Fran\u00e7ois\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_790\",\r\n                                  \"name\": \"Da Vinci\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_1601\",\r\n                                  \"name\": \"Religion\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D89_731\",\r\n                                  \"name\": \"Vatican\"\r\n                                }\r\n                              ]\r\n                            }\r\n                          ],\r\n                          \"geoloc\": {\r\n                            \"latitude\": \"-22.903539\",\r\n                            \"longitude\": \"-43.209587\",\r\n                            \"bounds\": {\r\n                              \"northeast\": {\r\n                                \"latitude\": \"-22.749045\",\r\n                                \"longitude\": \"-43.099382\"\r\n                              },\r\n                              \"southwest\": {\r\n                                \"latitude\": \"-23.08302\",\r\n                                \"longitude\": \"-43.795449\"\r\n                              }\r\n                            },\r\n                            \"address\": {\r\n                              \"thoroughfare\": \"\",\r\n                              \"postalcode\": \"\",\r\n                              \"locality\": \"Rio de Janeiro\",\r\n                              \"subadminarea\": \"\",\r\n                              \"adminarea\": \"Rio de Janeiro\",\r\n                              \"country\": \"BR\"\r\n                            }\r\n                          }\r\n                    \t\t\r\n                    \t},\r\n                    \t\r\n                    \t{ \"firstname\": \"Abdul\",\r\n                    \t\t\"lastname\": \"Fromager\",\r\n                    \t\t\"title\": \"Milk Recipes\",\r\n                    \t\t\t\"image\": [\r\n                            {\r\n                              \"code\": \"256x256\",\r\n                              \"url\": \"assets\/userphoto\/Abdul-Fromager-Selbstbildnis.jpg\"  \r\n                            }],\r\n                      \t\t\"body\": \"<p>Nulla facilisi. Etiam enim tellus, adipiscing et rutrum vitae, tempus nec orci. Aenean in consequat nunc. Pellentesque sagittis dolor non leo rutrum at suscipit quam adipiscing. Nulla faucibus faucibus neque id ultrices. Suspendisse potenti. Nulla sit amet justo vitae leo convallis facilisis. Maecenas condimentum urna quis tellus imperdiet sagittis. Nam quis metus sed erat feugiat sollicitudin pulvinar nec justo. Sed est quam, porta non elementum non, ullamcorper eu arcu. <b>Duis semper placerat enim non luctus. Vivamus tincidunt tempor erat, ac fringilla nulla aliquam quis. Suspendisse pretium enim risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi id risus vel nibh dignissim dictum.<\/b><\/p>\",\r\n                    \t\t\r\n                    \t\t\t\"taxonomy\": [\r\n                            {\r\n                              \"vid\": \"1_D670_3\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D64_3\",\r\n                                  \"name\": \"Middle East\"\r\n                                }\r\n                              ]\r\n                            },\r\n                            {\r\n                              \"vid\": \"1_D670_1\",\r\n                              \"tags\": [\r\n                                {\r\n                                  \"tid\": \"1_D94_579\",\r\n                                  \"name\": \"Egypt\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D94_3942\",\r\n                                  \"name\": \"Moubarak\"\r\n                                },\r\n                                {\r\n                                  \"tid\": \"1_D94_3599\",\r\n                                  \"name\": \"Mohamed Morsi\"\r\n                                }\r\n                              ]\r\n                            }\r\n                          ],\r\n                          \"geoloc\": {\r\n                            \"latitude\": \"30.044420\",\r\n                            \"longitude\": \"31.235712\",\r\n                            \"bounds\": {\r\n                              \"northeast\": {\r\n                                \"latitude\": \"30.110602\",\r\n                                \"longitude\": \"31.301973\"\r\n                              },\r\n                              \"southwest\": {\r\n                                \"latitude\": \"30.009228\",\r\n                                \"longitude\": \"31.222067\"\r\n                              }\r\n                            },\r\n                            \"address\": {\r\n                              \"thoroughfare\": \"\",\r\n                              \"postalcode\": \"\",\r\n                              \"locality\": \"Cairo\",\r\n                              \"subadminarea\": \"\",\r\n                              \"adminarea\": \"Cairo Governorate\",\r\n                              \"country\": \"EG\"\r\n                            }\r\n                          }\r\n                    \t\t\r\n                    \t}\r\n                      \r\n                       \r\n                       \r\n                          ]\r\n                }\r\n          }\r\n    }\r\n<\/pre>\n<p><b>L&#8217;ensemble du fichier qui charge le tout&#8230;.<\/b><\/p>\n<pre lang=\"html\">\r\n  &lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\"\r\n     \"http:\/\/www.w3.org\/TR\/html4\/loose.dtd\"&gt;\r\n\r\n  &lt;html lang=\"en\"&gt;\r\n  &lt;head&gt;\r\n  \t&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\"&gt;\r\n  &lt;body&gt;\r\n  &lt;head&gt;\r\n  \t&lt;meta charset=\"utf-8\" \/&gt;\r\n  \t&lt;title&gt;Mustache complex&lt;\/title&gt;\r\n  \t&lt;link rel=\"STYLESHEET\" type=\"text\/css\" href=\"css\/good_all_style.css\"&gt;\r\n  &lt;\/head&gt;\r\n  &lt;body&gt;\r\n\r\n\r\n\r\n    &lt;h2&gt;Check Out the list&lt;\/h2&gt;\r\n\r\n    &lt;ul&gt;\r\n    \t&lt;li&gt;&lt;a href=\"javascript:sample_1()\" class=\"list\"&gt;Load sample_1&lt;\/a&gt;&lt;\/li&gt;\r\n    \t&lt;li&gt;&lt;a href=\"javascript:sample_2()\" class=\"list\"&gt;Load sample_2&lt;\/a&gt;&lt;\/li&gt;\r\n    &lt;\/ul&gt;\r\n\r\n    &lt;h2&gt;People&lt;\/h2&gt;\r\n    &lt;ul class=\"list\" id=\"PersonNewsFeed\"&gt;\r\n    &lt;\/ul&gt;  \r\n\r\n  &lt;script src=\"js\/jquery-1.7.1.min.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"js\/mustache.js\"&gt;&lt;\/script&gt;\r\n  &lt;script src=\"js\/main_mustache_complex.js\"&gt;&lt;\/script&gt;   \r\n  &lt;script id=\"content-template\" type=\"text\/template\"&gt;\r\n\r\n  &lt;ol&gt;\r\n  \t{{#result}}\r\n  \t\t{{#people}}\r\n  \t\t\t{{#person}}\r\n        &lt;li&gt;\r\n  \t\t\t{{#image}}\r\n  \t\t\t\t\t\t\t\t{{#code}}\r\n  \t\t\t\t\t\t\t\tIMG ({{code}}) =&gt; &lt;img src=\"{{url}}\" \/&gt;&lt;br&gt;\r\n  \t\t\t\t\t\t\t\t{{\/code}}\r\n  \t\t\t\t\t\t\t\t{{^code}}\r\n  \t\t\t\t\t\t\t\tno img\r\n  \t\t\t\t\t\t\t\t{{\/code}}\r\n  \t\t\t{{\/image}}\r\n\r\n\r\n  \t\t\t\tTITLE =&gt; &lt;a href=\"{{url}}\/\" title=\"{{title}}\"&gt;{{title}} &lt;\/a&gt;\r\n  \t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n\r\n  \t\t\t\t\tBODY escaped HTML =&gt; {{{body}}}\r\n  \t\t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n  \t\t\t\t\tBODY unescaped HTML =&gt; {{body}}\r\n  \t\t\t\t\t&lt;br&gt;&lt;br&gt;\r\n\r\n            TAXONOMY =&gt; \r\n  \t\t\t\t\t\t{{#taxonomy}}\r\n  \t\t\t\t\t\t\t{{#tags}}\r\n  \t\t\t\t\t\t\t\t&lt;span class=\"tag\"&gt;&lt;a class=\"no-decoration\" href=\"{{tid}}\"&gt;{{name}} ({{tid}})&lt;\/a&gt;&lt;\/span&gt;\r\n  \t\t\t\t\t\t\t{{\/tags}}\r\n  \t\t\t\t\t\t{{\/taxonomy}}\r\n  \t\t\t    &lt;br&gt;\r\n  \t\t\t    GEOLOC =&gt; \r\n        \t\t{{#geoloc}}\r\n        \t\t  LAT, LONG =&gt; ({{latitude}}, {{longitude}})\r\n        \t\t  &lt;br&gt;\r\n        \t\t      {{#address}}\r\n                                 GEOLOC =&gt; CITY, COUNTRY =&gt; &lt;span class=\"tag\"&gt;{{locality}} -[{{country}}]&lt;\/a&gt;&lt;\/span&gt;&lt;br&gt;\r\n              \t\t{{\/address}}\r\n        \t\t{{\/geoloc}}\r\n        &lt;\/li&gt;\r\n  \t\t\t{{\/person}}\r\n  \t\t{{\/people}}\r\n  \t{{\/result}}\r\n  &lt;\/ol&gt;\t\r\n\r\n  \t&lt;\/script&gt;\r\n\r\n \r\n\r\n\r\n\r\n\r\n  &lt;\/body&gt;\r\n  &lt;\/html&gt;\r\n  \r\n<\/pre>\n<p><b>Conclusion : <\/b> Cela peut sembler assez <code>bousinesque<\/code> et <code>d\u00e9cevant<\/code> de se donner tant de mal pour un si pi\u00e8tre r\u00e9sultat en terme UX. Disons-le les templates sont assez moches. Toutefois, l&#8217;objectif \u00e9tait de valider rapidement des r\u00e8gles fonctionnelles, \u00e0 l&#8217;aide de Mustache, en rendant des \u00e9crans plus &#8220;parlants&#8221; qu&#8217;un aride flux JSON, de ce point de vue la valeur ajout\u00e9e en terme fonctionnel est ind\u00e9niable.<\/p>\n<h2>En savoir plus<\/h2>\n<ul>\n<li>Le site officiel de <code>mustache<\/code> <br \/><a href=\"http:\/\/mustache.github.io\/\" target=\"_blank\">http:\/\/mustache.github.io\/<\/a><\/li>\n<li>Tutorial: HTML Templates with Mustache.js (excellent)<br \/><a href=\"http:\/\/coenraets.org\/blog\/2011\/12\/tutorial-html-templates-with-mustache-js\/\" target=\"_blank\">http:\/\/coenraets.org\/blog\/2011\/12\/tutorial-html-templates-with-mustache-js\/<\/a><\/li>\n<li>Add IF\/ELSE function upon value dans mustache<br \/><a href=\"https:\/\/github.com\/janl\/mustache.js\/issues\/311\" target=\"_blank\">https:\/\/github.com\/janl\/mustache.js\/issues\/311<\/a><\/li>\n<li>Installing Mustache.tmbundle dans textmate<br \/><a href=\"https:\/\/gist.github.com\/defunkt\/323624\" target=\"_blank\">https:\/\/gist.github.com\/defunkt\/323624<\/a><\/li>\n<li>Des explications sur les Mustache Tags<br \/><a href=\"https:\/\/github.com\/bobthecow\/mustache.php\/wiki\/Mustache-Tags\" target=\"_blank\">https:\/\/github.com\/bobthecow\/mustache.php\/wiki\/Mustache-Tags<\/a><\/li>\n<li>La fonction jQuery.getJSON() dans jQuery<br \/><a href=\"http:\/\/api.jquery.com\/jQuery.getJSON\/\" target=\"_blank\">http:\/\/api.jquery.com\/jQuery.getJSON\/<\/a><\/li>\n<li>Semantic templates with Mustache.js and Handlebars.js par Martin Brennan<br \/><a href=\"http:\/\/www.martin-brennan.com\/semantic-templates-with-mustache-js-and-handlebars-js\/\" target=\"_blank\">http:\/\/www.martin-brennan.com\/semantic-templates-with-mustache-js-and-handlebars-js\/<\/a><\/li>\n<li>How to Load Mustache.js Templates From an External File with jQuery<br \/><a href=\"http:\/\/www.levihackwith.com\/how-to-load-mustache-js-templates-from-an-external-file-with-jquery\/\" target=\"_blank\">http:\/\/www.levihackwith.com\/how-to-load-mustache-js-templates-from-an-external-file-with-jquery\/<\/a><\/li>\n<li>Quick Tip: Using the Mustache Template Library<br \/><a href=\"http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/quick-tip-using-the-mustache-template-library\/\" target=\"_blank\">http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/quick-tip-using-the-mustache-template-library\/<\/a><\/li>\n<li>Easy HTML Templates with Mustache<br \/><a href=\"http:\/\/www.elated.com\/articles\/easy-html-templates-with-mustache\/\" target=\"_blank\">http:\/\/www.elated.com\/articles\/easy-html-templates-with-mustache\/<\/a><\/li>\n<li>Introduction \u00e0 Punch &#8211; Punch is a simple, intuitive web publishing framework that will delight both designers and developers.<br \/><a href=\"http:\/\/laktek.github.io\/punch\/\" target=\"_blank\">http:\/\/laktek.github.io\/punch\/<\/a><\/li>\n<li>Une vid\u00e9o sur JavaScript and JSON tutorial: JavaScript templating with mustache.js | lynda.com<br \/><a href=\"http:\/\/corel.tv\/javascript-and-json-tutorial-javascript-templating-with-mustache-js-lynda-com\/\" target=\"_blank\">http:\/\/corel.tv\/javascript-and-json-tutorial-javascript-templating-with-mustache-js-lynda-com\/<\/a><\/li>\n<li>La m\u00eame vid\u00e9o sur youtube &#8211; JavaScript and JSON tutorial: JavaScript templating with mustache.js<br \/><a href=\"http:\/\/www.youtube.com\/watch?feature=player_embedded&#038;v=xIJuDcA6YBo#t=214\" target=\"_blank\">http:\/\/www.youtube.com\/watch?feature=player_embedded&#038;v=xIJuDcA6YBo#t=214<\/a><\/li>\n<li>A JSON Tutorial. Getting started with JSON using JavaScript and jQuery<br \/><a href=\"http:\/\/iviewsource.com\/codingtutorials\/getting-started-with-javascript-object-notation-json-for-absolute-beginners\/\" target=\"_blank\">http:\/\/iviewsource.com\/codingtutorials\/getting-started-with-javascript-object-notation-json-for-absolute-beginners\/<\/a><\/li>\n<li>Introduction to JavaScript Templating  with Mustache.js<br \/><a href=\"http:\/\/iviewsource.com\/codingtutorials\/introduction-to-javascript-templating-with-mustache-js\/\" target=\"_blank\">http:\/\/iviewsource.com\/codingtutorials\/introduction-to-javascript-templating-with-mustache-js\/<\/a><\/li>\n<li>L&#8217;extension JSONView pour Chrome, portage de l&#8217;excellent extension firefox original<br \/><a href=\"https:\/\/chrome.google.com\/webstore\/detail\/jsonview\/chklaanhfefbnpoihckbnefhakgolnmc\" target=\"_blank\">https:\/\/chrome.google.com\/webstore\/detail\/jsonview\/chklaanhfefbnpoihckbnefhakgolnmc<\/a><\/li>\n<li>L&#8217;extension firefox JSONView<br \/><a href=\"http:\/\/benhollis.net\/software\/jsonview\/\" target=\"_blank\">http:\/\/benhollis.net\/software\/jsonview\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dans un pr\u00e9c\u00e8dent billet, on avait vu comment utiliser le plugin de jQuery Template pour se faciliter le travail de g\u00e9n\u00e9ration de pages\/\u00e9crans\/IHM depuis des&hellip; <\/p>\n<p class=\"text-center\"><a href=\"https:\/\/flaven.fr\/2013\/10\/mustache-templating-library-jquery-json-utiliser-mustache-comme-systeme-de-template-javascript-pour-une-api-sortant-des-flux-json\/\" class=\"more-link\">Continue reading &rarr; <span class=\"screen-reader-text\">Mustache, Templating library, jQuery, JSON &#8211; Utiliser Mustache comme syst\u00e8me de template javascript pour une API sortant des flux JSON<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":9901,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"bf_ai_meta_description":"Mustache, biblioth\u00e8que de templating, jQuery, JSON \u2013 G\u00e9n\u00e9rez des pages dynamiques \u00e0 partir de flux JSON. Pr\u00e9sentez des aper\u00e7us intuitifs pour validation m\u00e9tier.","bf_ai_og_title":"Utiliser Mustache pour API JSON","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3439,3444,3447,3448,3449,3450,3451,3435],"tags":[2194,2183,513,465,372,524,562,13,2190,192,1887,521,155,1888,2192,475],"class_list":["post-9894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apis-integration","category-programming-databases","category-technology-trends","category-tools-productivity","category-tutorials-how-to","category-ux-product-design","category-web-design-front-end","category-web-development","tag-agile","tag-api","tag-axure","tag-balsamiq","tag-chrome","tag-console","tag-ecran","tag-ihm","tag-jquery","tag-json","tag-mustache","tag-omnigraffle","tag-photoshop","tag-templating-library","tag-ux-experience-utilisateur","tag-wireframe"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3Vuhl-2zA","jetpack_featured_media_url":"https:\/\/flaven.fr\/wp-content\/uploads\/2013\/10\/json_mustache_bf.jpg","_links":{"self":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/9894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/comments?post=9894"}],"version-history":[{"count":3,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/9894\/revisions"}],"predecessor-version":[{"id":9903,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/posts\/9894\/revisions\/9903"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media\/9901"}],"wp:attachment":[{"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/media?parent=9894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/categories?post=9894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/flaven.fr\/happy-api\/wp\/v2\/tags?post=9894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}