json-wrapper v1.0.8
= 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