Nice. Another piece of the puzzle. Thank you.
> On 22 Nov 2018, at 17:56, Norbert Hartl <norb...@hartl.name> wrote:
>
> JSONSchema
> ===========
>
> This is an implementation of JSON Schema for the pharo language. It is used
> to define the structure and values of a JSON string and to validate it. The
> schema itself can be externalized for being consumed by a third party.
>
> I like to announce the availability of a JSON schema implementation for
> pharo. As part of my implementation of OpenAPI (which is to be released a bit
> later) I factored out the JSON schema part into its own repository because I
> think it is useful. I release it even it is not really finished. Code is
> mostly undocumented and a lot of features are missing from the full spec. I
> will improve it slowly and add features as I need them or they being requested
>
> Hope you like it!
>
> Norbert
>
> ====
>
> The documentation so far (from https://github.com/zweidenker/JSONSchema)
>
> It can be loaded by downloading it in pharo via
>
> Metacello new
> repository: 'github://zweidenker/JSONSchema';
> baseline: #JSONSchema;
> load
>
> Defining a schema
> -------------------------
>
> These are the expression to create a schema model inside pharo.
>
> schema := {
> #name -> JSONSchema string.
> #dateAndTime -> (JSONSchema stringWithFormat: 'date-time').
> #numberOfPets -> JSONSchema number } asJSONSchema.
>
>
> defines as schema that can parse the following JSON:
>
> jsonString := '{
> "name" : "John Doe",
> "dateAndTime" : "1970-01-01T14:00:00",
> "numberOfPets" : 3
> }'.
>
> Reading/Writing a value using a schema
> ------------------------------------------------------
>
> To parse the value from JSON we only need to invoke:
>
> value := schema read: jsonString
>
> The object in value will have name as a string, dateAndTime as a DateAndTime
> object and numberOfPets as a SmallInteger object.
>
> The schema can also be used to write out the value as JSON. This is
> especially useful if we want to ensure that only valid JSON is written. For
> this invoke
>
> jsonString := schema write: value.
>
> Serialize/Materialize a schema
> ----------------------------------------
>
> Addtionally to reading and writing objects a schema can be serialized to
> string.
>
> schemaString := NeoJSONWriter toStringPretty: schema.
>
> gives
>
> {
> "type" : "object",
> "properties" : {
> "name" : {
> "type" : "string"
> },
> "numberOfPets" : {
> "type" : "number"
> },
> "dateAndTime" : {
> "type" : "string",
> "format" : "date-time"
> }
> }
> }
>
>
> If we would get a schema as string we can instantiate by invoking
>
> schema := JSONSchema fromString: schemaString.
>
> Nested schemas
> -----------------------
>
> Schemas can be nested in any depth. And it can be specified by using the
> literal Array syntax.
>
> schema := {
> #name -> JSONSchema string.
> #address -> {
> #street -> JSONSchema string.
> #number -> JSONSchema number
> } } asJSONSchema
>
> Constraints
> ---------------
>
> JSON Schema has a defined set of constraints that can be specified. E.g. for
> a number the inerval of the value can be specified by
>
> numberSchema := JSONSchema number.
> numberSchema interval
> minimum: 1;
> exclusiveMaximum: 100
>
> constraining the number value to be greater or equal to 1 and smaller than
> 100.
>