1.0.8 • Published 8 months ago

json-wrapper v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

= JSON WRAPPER

Enrich and manipulate a json object with the behavior of a class object. + Inspired by link:https://martinfowler.com/articles/refactoring-document-load.html[Refactoring Code to Load a Document].

== Import === ES6

,javascript

import JsonWrapper from "json-wrapper"

=== CommonJS

,javascript

const JsonWrapper = require("json-wrapper")

== Usage . create a new class and extends JsonWrapper . set static schema, it must be a valid json schema (see link:https://json-schema.org[Json-Schema]). . (Optional) set static referencedClasses, if you want to reference other classes with "$ref".

== Examples

=== Simple usage

,javascript

class User extends JsonWrapper { static schema = { "id" : "User", "type" : "object", "properties" : { "first_name" : {"type" : "string"}, "last_name" : {"type" : "string"} } } getFullname() { return this.first_name + " " + this.last_name }
}

let aUser = User.fromJsonString( "{first_name: \"John\", last_name: \"Doe\"}" )

console.log( aUser.getFullname() ) //prints "John Doe"

=== Nested usage

,javascript

class App extends JsonWrapper { static schema = { "id" : "App", "type" : "object", "properties" : { "users" : { "type" : "array", "items" : { "$ref" : "User" } } } } static referencedClasses = User }

class User extends JsonWrapper { static schema = { "id" : "User", "type" : "object", "properties" : { "country" : { "$ref" : "Country" } } } static referencedClasses = Country }

class Country extends JsonWrapper { static schema = { "type" : "object", "properties" : { "language" : { "type" : "string" }, "code" : { "type" : "string" } } } get locale() { return this.language + "_" + this.code } }

let app = App.fromJsonString( { users : [{ first_name: "John", last_name: "Doe", country: { language : "it" code : "IT" } }] } ) console.log( app.users0.country.locale ) //prints "it_IT"


=== Constructors that doesn't respect the contract

,javascript

class Account extends JsonWrapper { //schema and classReferenced omitted constructor( name ) { // new Account() not callable ! super() if( !name ) throw Error() this.name = name } }

class User extends JsonWrapper { //schema omitted static referencedClasses = Country // new Country() not callable ! }

class Country { constructor( countryCode ) { if( !countryCode ) throw Error() this.countryCode = countryCode }

}

== Methods

=== Static methods

  • fromJsonString( string ) => JsonWrapper

  • fromJsonObject( object ) => JsonWrapper

=== Instance methods

  • toJsonString() => string

  • toJsonObject() => object

1.0.8

8 months ago

1.0.7

8 months ago

1.0.6

8 months ago

1.0.5

8 months ago

1.0.4

8 months ago

1.0.3

8 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago