1.0.8 • Published 10 months ago

json-wrapper v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
10 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

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago