如何使用/引用在同一个 json 模式中生成的字段值
Posted
技术标签:
【中文标题】如何使用/引用在同一个 json 模式中生成的字段值【英文标题】:How to use / reference field values generated in the same json schema 【发布时间】:2019-07-23 05:46:09 【问题描述】:我正在尝试将json-server
与json-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
指出的所有三个位置都相同。
请注意,我不能使用 enum
或 const
,因为我希望出现多个 tests
。
test2_ids
将是一个数组,所以我想包含第一个 id 的特定 id 以及相同类型的其他值..
在test3
的id
中,我只想要与test
的id
完全相同的值。
我想要实现的目标可行吗?
或者有没有办法更改 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
为字段password
和password_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 框架库中生成的对象数组