GoJS does not require you to save models in any particular medium or
format. But because this is JavaScript and JSON is the most popular
data-interchange format, we do make it easy to write and read models
as text in JSON format.
Just call Model.toJson to generate a string representing your model.
Call the static method Model.fromJson to construct and initialize a
model given a string produced by Model.toJson. Many of the samples
demonstrate this — search for JavaScript functions named “save” and
“load”. Most of those functions write and read a TextArea on the page
itself, so that you can see and modify the JSON text and then load it
to get a new diagram. But please be cautious when editing because JSON
syntax is very strict, and any syntax errors will cause those “load”
functions to fail.
JSON formatted text has strict limits on the kinds of data that you
can represent without additional assumptions. To save and load any
data properties that you set on your node data (or link data), they
need to meet the following requirements:
the property is enumerable and its name does not start with an
underscore (you can use property names that do start with an
underscore, but they won’t be saved) the property value is not
undefined and is not a function (JSON cannot faithfully hold
functions) the model knows how to convert the property value to JSON
format (numbers, strings, JavaScript Arrays, or plain JavaScript
Objects) property values that are Objects or Arrays form a tree
structure — no shared or cyclical references Model.toJson and
Model.fromJson will also handle instances of Point, Size, Rect, Spot,
Margin, Geometry, and non-pattern Brushes. However we recommend that
you store those objects in their string representations, using those
classes’ parse and stringify static functions.
Because you are using JavaScript, it is trivial for you to add data
properties to your node data. This allows you to associate whatever
information you need with each node. But if you need to associate some
information with the model, which will be present even if there is no
node data at all, you can add properties to the Model.modelData
object. This object’s properties will be written by Model.toJson and
read by Model.fromJson, just as node data objects are written and
read.