{{ transformations:ConstructJsonAction.png}} ======CONSTRUCT JSON====== Category: Transform / Web\\ \\ =====Description===== This action constructs a [[https://en.wikipedia.org/wiki/JSON|JSON]] object from a tabular dataset. It has two modes: * Object per row, array from objects * Array per column A constructed JSON object is effectively a regular text value that is stored in a datagrid cell in EasyMorph.\\ \\ =====Action settings===== ==== Mode: "Object per row" ==== In this mode, each row of the source dataset is used to construct a flat JSON object in which every column value corresponds to one object property. For instance, the dataset below: ^ Name ^ Kingdom ^ Phylum ^ Subphylum ^ Class ^ Order ^ Family ^ | Rabbit |Animalia | Chordata | Vertebrata | Mammalia | Lagomorpha | Leporidae | is constructed as the following JSON: { "Name":"Rabbit", "Kingdom":"Animalia", "Phylum":"Chordata", "Subphylum":"Vertebrata", "Class": "Mammalia", "Order":"Lagomorpha", "Family": "Leporidae" } If the source dataset contains multiple rows, they will be converted into an array of JSON objects where each object corresponds to one row. Example: ^ ID ^ Name ^ | 1 | Apple | | 2 | Orange | Result: [ { "ID":1, "Name":"Apple" }, { "ID":2, "Name":"Orange" } ] \\ ==== Mode: "Array per column" ==== In this mode, the source dataset is converted into a new dataset in which values of each column are rolled up into a JSON array. For instance, the table from the example above would be converted into the following table: ^ ID ^ Name ^ | [1,2] | [Apple,Orange] | \\ \\ ===== Data type conversion ===== EasyMorph data types are converted to JSON types as follows: ^ EasyMorph ^ Example ^ JSON ^ Example ^ | Text | ABC | string | "ABC" | | Number | 123.45 | number | 123.45 | | Number (formatted as date) | 2020-Jan-10 | date | 2020-01-10T00:00:00 | | Boolean | TRUE | boolean | true | | Empty | | null | null | | Error | #Division by zero | Fails to convert || Note that the action fails if the source dataset contains an error value. \\ ===== Nesting JSON objects ===== EasyMorph automatically detects if a text value is already a JSON object or a JSON array. In this case, the text value is inserted verbatim, i.e. **without** wrapping in double-quotes. This feature allows creating complex hierarchical JSON objects that nest other JSON objects. For instance, converting the table below: ^ Track ^ Country ^ State/province ^ City ^ Location ^ Hiatus ^ | Circuit Gilles Villeneuve | Canada | QC | Montreal | {"lat":45.500578, "long":-73.522461} | [1987, 2009] | would produce the following JSON: { "Track":"Circuit Gilles Villeneuve", "Country":"Canada", "State/province":"QC", "City":"Montreal" "Location": { "lat":45.500578, "long":-73.522461 }, "Hiatus": [1987, 2009] } Notice that "Location" is inserted as a JSON object, not as text. Also, the field "Hiatus" is inserted as a JSON array, not as text. \\ =====Community examples===== * [[https://community.easymorph.com/t//1279/6|Example: Constructing JSON]] ([[https://community.easymorph.com/uploads/short-url/qlhc3zdusCyuxWf2u0h0dqvgo0v.morph|Project]]; Module: //Main//; Group: //Tab 1//; Table: //comments//; Action position: //2//) * [[https://community.easymorph.com/t//1661/1|How to create JSON for Airtable API]] ([[https://community.easymorph.com/uploads/short-url/kBrGoLczmNrnMt0SnXUhqOwjjRF.morph|Project]]; Module: //Main//; Group: //Tab 1//; Table: //Table 1//; Action position: //6//) * [[https://community.easymorph.com/t//2142/2|Constructing JSON issue]] ([[https://community.easymorph.com/uploads/short-url/aSWREiaUoC1qFEYRqTyu4Nwzdls.morph|Project]]; Module: //Main//; Group: //Tab 1//; Table: //Construct main JSON//; Action position: //4//) * [[https://community.easymorph.com/t//2641/1|How to publish real-time data to streaming dataset in Power BI]] ([[https://community.easymorph.com/uploads/short-url/22DTxfF295TVGQhGyvWGsHyadRt.morph|Project]]; Module: //Main//; Group: //Tab 1//; Table: //Table 1//; Action position: //5//) * [[https://community.easymorph.com/t/webrequest-and-parameters/2758/3|Community example: Webrequest and parameters]] \\ ===== See also ===== * [[transformations:parsejson|Parse JSON]] * [[syntax:functions:isjson|Functions: IsJson()]]