如何使用/引用在同一个 json 模式中生成的字段值

Posted

技术标签:

【中文标题】如何使用/引用在同一个 json 模式中生成的字段值【英文标题】:How to use / reference field values generated in the same json schema 【发布时间】:2019-07-23 05:46:09 【问题描述】:

我正在尝试将json-serverjson-schema-faker 结合使用来创建模拟数据。

我试图使用 $ref 属性,但我知道这仅引用类型而不是确切值。

有没有办法重用完全相同的值而不仅仅是它的类型?

mockDataSchema.js 文件中的架构是:

var schema =

    "title": "tests",
    "type": "object",
    "required": [
        "test"
    ],
    "properties": 
        "test": 
            "type": "object",
            "required": [
                "id",
                "test2_ids",
                "test3"
            ],
            "properties": 
                "id": 
                    "type": "string",
                    "faker": "random.uuid" // here
                ,
                "test2_ids": 
                    "type": "array",
                    "items": 
                        "type": "string",
                        "faker": "random.uuid" // here
                    
                ,
                "test3": 
                    "type": "array",
                    "items": 
                        "type": "object",
                        "properties": 
                            "id": 
                                "type": "string",
                                "faker": "random.uuid" // here
                            
                        
                    
                
            
        
    
;

module.exports = schema;

从这个架构中,我希望id 在我用评论// here 指出的所有三个位置都相同。

请注意,我不能使用 enumconst,因为我希望出现多个 tests

test2_ids 将是一个数组,所以我想包含第一个 id 的特定 id 以及相同类型的其他值..

test3id 中,我只想要与testid 完全相同的值。

我想要实现的目标可行吗?

或者有没有办法更改 generateMockData.js 文件中的这些数据,而不是包含此架构的 mockDataSchema.js

我的generateMockData.js

var jsf = require('json-schema-faker');
var mockDataSchema = require('./mockDataSchema');
var fs = require('fs');

var json = JSON.stringify(jsf(mockDataSchema));

fs.writeFile("./src/api/db.json", json, function (err) 
  if (err) 
    return console.log(err);
   else 
    console.log("Mock data generated.");
  

);

【问题讨论】:

【参考方案1】:

我想在这里分享一个我找到的解决方案。就我而言,我需要使用json-schema-faker 为字段passwordpassword_confirmation 生成相同的值,对我有用的是,在faker 库中分配一个新属性并将新属性名称放入伪造模式。代码如下:

import faker from 'faker';
import jsf from 'json-schema-faker';

// here we generate a random password using faker
const password = faker.internet.password();
// we assign the password generated to a non-existent property, basically here you create your own property inside faker to save the constant value that you want to use.
faker.internet.samePassword = () => password;
// now we specify that we want to use faker in jsf
jsf.extend('faker', () => faker);
// we create the schema specifying the property that we have created above
const fakerSchema = 
   type: 'object',
   properties: 
      password: 
         faker: 'internet.samePassword',
         type: 'string'
      ,
      password_confirmation: 
         faker: 'internet.samePassword',
         type: 'string'
      
   
;
// We use the schema defined and voilá!
let dataToSave = await jsf.resolve(fakerSchema);


/*
This is the data generated

   password: 'zajkBxZcV0CwrFs',
   password_confirmation: 'zajkBxZcV0CwrFs'

*/

【讨论】:

以上是关于如何使用/引用在同一个 json 模式中生成的字段值的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS 中保存在 ng-repeat 中生成的字段

“您确定要离开此页面吗?”是如何在浏览器中生成的?

在 node.js 中生成的 JWT(JSON Web Token) 未在 java 中验证

如何在 KMM(kotlin 本机)共享模块中读取 Swift 框架库中生成的对象数组

如何强制数据透视表中生成的值采用特定格式(Aspose Cells)?

我如何使用在 Jmeter 的下一个线程中生成的令牌