Thank you Norbert and IID. Another brick in the bridge towards mainstream. :)
Regards, El jue., 22 nov. 2018 a las 18:11, Sven Van Caekenberghe (<s...@stfx.eu>) escribiĆ³: > > 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. > > > >