json-class

0.6.5 • Public • Published

json-class for typescript

@Json

  • string number boolean Object Array
  • alias
  • default value
  • add new key
  • delete key
  • missing key convert to type definiton
  • convert to typescript Type definition
  • custom convert function

install

npm i -S json-class reflect-metadata

import "reflect-metadata"; import {ToClass,Json } from 'json-class'

example of using

import "reflect-metadata";
import {ToClass ,Json} from 'json-class'
class Propertie {
  @Json
  name: string;

  @Json(String)                     //Array string
  values: string[]
}

class Sku {
  @Json
  name: string = "拉面";             //default value

  @Json
  price: string;

  @Json("sku_id")                  //alias key name
  skuid: string;

  @Json
  spec: string;

  @Json
  stock: number;                   // string convert to number

  @Json                              //add new key and default value
  isChecked: boolean = false;
}

 class Good {
    @Json
    name: string;
  
    @Json
    subname: string;
  
    @Json(['name', 'place'], (name, place) => place + name) //custom convert function
    fullname: string;
  
    @Json
    description: string;
  
    @Json
    price: string;
  
    @Json
    min_order_count: number
  
    @Json
    unit: string;
  
    @Json
    category_name: string;
  
    @Json
    picture: string;
  
    @Json(Sku)                   //Array Object conversion
    skus: Sku[];
  
    @Json
    properties: Propertie;       //Object conversion
  }


const tansformJson = {
  "name": "拉面",
  "place": "兰州",
  "description": "",
  "price": 11,
  "min_order_count": 1,
  "unit": "支",
  "category_name": "分类",
  "picture": "http://p0.meituan.net/34747.jpg",
  "skus": [{
    name: "牛肉拉面加个蛋",
    price: "21.00",
    sku_id: "987651",
    spec: "M-09",
    stock: "20"
  },
  {
    price: "23.00",
    sku_id: "783651",
    spec: "M-0908",
    stock: "a"
  }],
  "properties": {
    "name": "口味",
    "values": ["辣", "不辣"]
  }
}
console.log(ToClass(tansformJson, Good));

//output==>
{
  "name": "拉面",
  "subname": "",
  "fullname": "兰州拉面",
  "description": "",
  "price": "11",
  "min_order_count": 1,
  "unit": "支",
  "category_name": "分类",
  "picture": "http://p0.meituan.net/34747.jpg",
  "skus": [
    {
      "name": "牛肉拉面加个蛋",
      "isChecked": false,
      "price": "21.00",
      "skuid": "987651",
      "spec": "M-09",
      "stock": 20
    },
    {
      "name": "拉面",
      "isChecked": false,
      "price": "23.00",
      "skuid": "783651",
      "spec": "M-0908",
      "stock": 0
    }
  ],
  "properties": {
    "name": "口味",
    "values": [
      "辣",
      "不辣"
    ]
  }
}

Readme

Keywords

none

Package Sidebar

Install

npm i json-class

Weekly Downloads

1

Version

0.6.5

License

ISC

Unpacked Size

253 kB

Total Files

52

Last publish

Collaborators

  • angrycans