{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "chem-bla-ics",
  "description": "Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.",
  "home_page_url": "https://chem-bla-ics.linkedchemistry.info/",
  "feed_url": "https://chem-bla-ics.linkedchemistry.info/2013/10/30/programming-in-life-sciences-10.json",
  "icon": "https://chem-bla-ics.linkedchemistry.info/assets/images/chem-bla-ics_logo.png",
  "language": "en",
  "authors": [
    {
      "name": "Egon Willighagen",
      "url": "https://orcid.org/0000-0001-7542-0286",
      "_orcid": "0000-0001-7542-0286"
    }
  ],
  "items": [

    {
      "id": "https://doi.org/10.59350/xdnrb-rrc91",
      "url": "https://chem-bla-ics.linkedchemistry.info/2013/10/30/programming-in-life-sciences-10.html",
      "title": "Programming in the Life Sciences #10: JavaScript Object Notation (JSON)",
      "content_html": "<p>As said, <a href=\"https://en.wikipedia.org/wiki/JSON\">JSON</a> is the format we will use as serialization format\nfor answers given by the <a href=\"https://dev.openphacts.org/docs\">Open PHACTS LDA</a>. The API actually supports\nXML, RDF, HTML, and TSV too, but I think JSON is a good balance between expressiveness and compactness.\nMoreover, and perhaps a much better argument, JSON works very well in a JavaScript environment: it is\nvery easy to convert the serialization into a data model:</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">var</span> <span class=\"nx\">jsonData</span> <span class=\"o\">=</span> <span class=\"nx\">JSON</span><span class=\"p\">.</span><span class=\"nf\">parse</span><span class=\"p\">(</span><span class=\"nx\">jsonString</span><span class=\"p\">);</span>\n</code></pre></div></div>\n\n<p>Now, we previously covered maps. Maps have keys and values: the keys unlock a particular value.\nFor example, take this JavaScript:</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">var</span> <span class=\"nx\">map</span> <span class=\"o\">=</span> <span class=\"p\">{</span> <span class=\"dl\">\"</span><span class=\"s2\">key</span><span class=\"dl\">\"</span><span class=\"p\">:</span> <span class=\"dl\">\"</span><span class=\"s2\">value</span><span class=\"dl\">\"</span><span class=\"p\">,</span> <span class=\"dl\">\"</span><span class=\"s2\">key2</span><span class=\"dl\">\"</span><span class=\"p\">:</span> <span class=\"dl\">\"</span><span class=\"s2\">value2</span><span class=\"dl\">\"</span> <span class=\"p\">};</span>\n</code></pre></div></div>\n\n<p>We define here a key-value object, and we can access the two values with the two keys:</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nx\">map</span><span class=\"p\">[</span><span class=\"dl\">\"</span><span class=\"s2\">key2</span><span class=\"dl\">\"</span><span class=\"p\">];</span> <span class=\"c1\">// == value2</span>\n</code></pre></div></div>\n\n<p>These examples are JavaScript source code. Not a string. The content of the map variable is a data\nstructure. But when we communicate with a web service, we need a (string) serialization of the data\nmodel, because we cannot send around memory pointers (which a variable is) because they are only\nvalid on a single machine.</p>\n\n<p>This is where the JSON format comes in. We can convert the content of the above map variable into a\nstring representation with this code:</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">var</span> <span class=\"nx\">mapStringified</span> <span class=\"o\">=</span> <span class=\"nx\">JSON</span><span class=\"p\">.</span><span class=\"nf\">stringify</span><span class=\"p\">(</span><span class=\"nx\">map</span><span class=\"p\">);</span>\n</code></pre></div></div>\n\n<p>which gives us the following output:</p>\n\n<div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{</span><span class=\"nl\">\"key\"</span><span class=\"p\">:</span><span class=\"s2\">\"value\"</span><span class=\"p\">,</span><span class=\"nl\">\"key2\"</span><span class=\"p\">:</span><span class=\"s2\">\"value2\"</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div></div>\n\n<p>This string looks an awful lot like the JavaScript code we wrote earlier.</p>\n\n<p>And, likewise we can convert the JSON string back into a JavaScript data model again, with:</p>\n\n<div class=\"language-javascript highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">var</span> <span class=\"nx\">mapAgain</span> <span class=\"o\">=</span> <span class=\"nx\">JSON</span><span class=\"p\">.</span><span class=\"nf\">parse</span><span class=\"p\">(</span><span class=\"nx\">mapStringified</span><span class=\"p\">);</span>\n</code></pre></div></div>\n\n<p>Now, I did warn you earlier that values can be lists and maps itself again, so consider this\nJSON example from Wikipedia:</p>\n\n<div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{</span><span class=\"w\">\n    </span><span class=\"nl\">\"id\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"Foo\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"price\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">123</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"tags\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\"> </span><span class=\"s2\">\"Bar\"</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s2\">\"Eek\"</span><span class=\"w\"> </span><span class=\"p\">],</span><span class=\"w\">\n    </span><span class=\"nl\">\"stock\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">\n        </span><span class=\"nl\">\"warehouse\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">300</span><span class=\"p\">,</span><span class=\"w\">\n        </span><span class=\"nl\">\"retail\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">20</span><span class=\"w\">\n    </span><span class=\"p\">}</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div></div>\n\n<p>Here we see that the value behind the stock key is another map, and the value behind the tags\nkey is a list. This creates a quite flexible serialization format, which is happily used by\nOpen PHACTS. (And for the semantic web readers, yes, we can make JSON more semantic. The Open\nPHACTS LDA supports a “rdfjson” format.)</p>",
      "summary": "As said, JSON is the format we will use as serialization format for answers given by the Open PHACTS LDA. The API actually supports XML, RDF, HTML, and TSV too, but I think JSON is a good balance between expressiveness and compactness. Moreover, and perhaps a much better argument, JSON works very well in a JavaScript environment: it is very easy to convert the serialization into a data model:",
      
      "date_published": "2013-10-30T00:10:00+00:00",
      "date_modified": "2025-02-15T00:00:00+00:00",
      "tags": ["pra3006","json"],
      
      
      
      
      
      
        "authors": [ { "name": "Egon Willighagen", "url": "https://orcid.org/0000-0001-7542-0286" } ]
      
    }

  ]
}
