美文网首页
使用 Dreamjs 生成 JSON 伪数据

使用 Dreamjs 生成 JSON 伪数据

作者: binyu1231 | 来源:发表于2019-02-24 16:13 被阅读3次

    基本使用

    github: https://github.com/adleroliveira/dreamjs

    $ yarn add dreamjs -D
    
    # or 
    
    $ npm i dreamjs -D
    
    import dream from 'dreamjs'
    
    dream.schema({name: 'name'}).generateRnd().output()
    // { name: 'Sam Nichols' }
    
    dream.schema({name: 'name'}).generateRnd(2).output()
    // [ { id: 'Maria Porter' }, { id: 'Evan Santiago' } ]
    

    类型

    基础的类型

    dream.schema('String', { result: String })
    dream.schema('Number', { result: Number })
    dream.schema('Boolean', { result: Boolean })
    dream.schema('Array', { result: Array })
    dream.schema('Object', { result: Object })
    dream.schema('Function', { result: Function })
    dream.schema('Date', { result: Date })
    

    自定义类型

    有两种可以自定义类型的方式

    1. 直接写正则表达式

    dreamjs 依赖 randexp 实现正则表达式的转换

    dream.schema('order', {
      orderId: /[A-Z]{3}[0-9]{4,10}/,
      state: /(1|2)/,
      image: /http:\/\/www\.\w{6}\.(com|cn|cc)\/\w{4,10}\.(png|jpg|gif)/
    })
    .generateRnd()
    .output()
    
    /*
    { 
      orderId: 'YCX85258',
      state: '1',
      image: 'http://www.0unc5Z.cn/9HQTx.gif' 
    }
    */
    
    1. 使用 dream.customType 方法
    // 自增id
    // 需要注意的是`自增id`依赖上一个项目的 id 字段,也就是说 key 必须为 id 才能使用 'plusId' 这个类型
    dream.customType('plusId', helper => {
      return helper.previousItem ? helper.previousItem.id + 1 : 1
    })
    
    // 工作日
    // oneOf 是helper 的内置函数,内部使用 lodash 中的 sample 函数来随机获取集合中的一个元素
    // _.sample <https://www.lodashjs.com/docs/4.17.5.html#sample>
    dream.customType('businessDays', helper => {
      return helper.oneOf(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])
    })
    
    dream.schema({
      id: 'plusId',
      day: 'businessDays'
    })
    .generateRnd(3)
    .output()
    
    /*
    [ { id: 1, day: 'Wednesday' },
      { id: 2, day: 'Tuesday' },
      { id: 3, day: 'Tuesday' } ]
    */
    

    helper 中另一个内置属性是 helper.chance 它是 chance 库的实例,使用方法在下方预定义类型中有介绍

    预定义的类型

    有很多比较常用的模板比如城市(city),年龄(age)这些东西,dreamjs 在内部引用了 chance 库来实现。比如

    const personSchema = dream.schema('person', {
      name: 'name',
      city: 'city',
      age: 'age'
      // ...
    })
    

    但需要注意的是,dreamjs 默认只能使用 chance 库原型链方法的无参形式

    temporaryValue = (typeof (chance[propertyType]) === 'function') ? 
                     chance[propertyType]() : 
                     '[Unknown Custom Type]';
    

    如果要使用 chance 高级功能,可以在customType 中的 helper 中访问到 chance

    dream.customType('childrenAge', helper => helper.chance.age({ type: 'child' }))
    

    chance 的官方网站: http://chancejs.com/

    类型的组合使用

    
    dream.schema('orderList', {
      id: String,
      subOrder: [Number, Number, Number],
      data: {
        owner: 'name',
        city: ['country', 'city'],
        address: 'address'
      }
    })
    .generateRnd(2)
    .output()
    
    
    /*
    [
      {
        "id":"LTMWymda7ct8)V(Y&",
        "subOrder":[995639840210944,1561101036683264,3440815498067968],
        "data":{
          "owner":"Isaiah Holt",
          "city":["KR","Zabawi"],
          "address":"1444 Pavam Park"
        }
      },{
        "id":"pPNalegUq)Q(GgrmV@V7",
        "subOrder":[5977717554020352,511086627389440,2681794893709312],
        "data":{
          "owner":"Edgar Thornton",
          "city":["SR","Lelavur"],
          "address":"1933 Fiwer Heights"
        }
      }
    ]
    */
    

    常用方法

    schema([String:name]?, [Object:opt])

    useSchema([String:name])

    
    dream.schema('User', {
      name: String,
      age: Number
    })
    
    dream.schema('Location', {
      address: String,
      postcode: Number
    })
    
    const data = dream
    .useSchema('Location')
    .generateRnd()
    .output()
    

    customType([String:name], [Function:handler])

    自定义类型

    output(), output([Function:callback])

    const data = dream.output()
    dream.output((err, result) => {
      if (err) {
        // ...
      }
      else {
        // ...
      }
    })
    

    input(Object:PassedData)

    通过 input 可以实现自定义数据流,可以再 CustomType 回调中的 helper 使用它

    // 官方例子
    dream.customType('customTypeWithInput', function (helper) {
      return helper.input.value;
    });
    
    dream.input({value: 'Provided by an input'})
    .schema({
      result: 'customTypeWithInput'
    })
    .generateRnd()
    .output(function (err, result) {
      console.log(result);
    });
    
    // { result: 'Provided by an input' }
    

    generate([Number:count])

    generateRnd([Number:count])

    这两个函数都会生成给定模式给定数量的实例,generateRnd 会用随机数据填充,generate 只返回空的模式

    cleanse()

    清除输出和选中的 schema

    // source
    self.cleanse = function() {
      self._output = null;
      self._selectedSchema = null;
    };
    

    注意事项

    1. 每次生成数据时要调用 generateRnd 方法填充数据,默认不填充

    相关文章

      网友评论

          本文标题:使用 Dreamjs 生成 JSON 伪数据

          本文链接:https://www.haomeiwen.com/subject/jahbyqtx.html