├── random
├── image.jpg
├── null.js
├── boolean.js
├── float.js
├── image.js
├── number.js
├── string.js
├── array.js
├── count.js
├── chinese.js
└── numberRange.js
├── example
├── img
│ └── jsoneditor-icons.png
├── randomjson.html
└── jsoneditor.css
├── .gitignore
├── package.json
├── LICENSE
├── index.js
├── README.md
└── dist
└── dist.js
/random/image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhoushengmufc/randomjson/HEAD/random/image.jpg
--------------------------------------------------------------------------------
/random/null.js:
--------------------------------------------------------------------------------
1 | function randomNull() {
2 | return null;
3 | }
4 | module.exports = randomNull;
--------------------------------------------------------------------------------
/example/img/jsoneditor-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhoushengmufc/randomjson/HEAD/example/img/jsoneditor-icons.png
--------------------------------------------------------------------------------
/random/boolean.js:
--------------------------------------------------------------------------------
1 | function randomBoolean() {
2 | return (Math.random() > 0.5? true: false);
3 | }
4 | module.exports = randomBoolean;
--------------------------------------------------------------------------------
/random/float.js:
--------------------------------------------------------------------------------
1 | function randomFloat(intDigit, decDigit) {
2 | var intDigit = intDigit? intDigit: 2;
3 | var decDigit = decDigit? decDigit: 2;
4 | var intNumber = Math.floor(Math.random() * Math.pow(10, intDigit));
5 | return intNumber + parseFloat(Math.random().toFixed(decDigit));
6 | }
7 | module.exports = randomFloat;
--------------------------------------------------------------------------------
/random/image.js:
--------------------------------------------------------------------------------
1 | var defaultWidth = 400;
2 | var defaultHeight = 400;
3 | function randomImage(width, sNumber, height) {
4 | var iWidth = width? width: defaultWidth;
5 | var iHeight = height? height: defaultHeight;
6 | return 'https://dummyimage.com/' + iWidth + 'x' + iHeight;
7 | }
8 | module.exports = randomImage;
9 |
10 |
--------------------------------------------------------------------------------
/random/number.js:
--------------------------------------------------------------------------------
1 | var randomCount = require('./count');
2 | var maxBits = 308;
3 | var generalFNumber = 1;
4 | var generalTNumber = 10;
5 | function randomNumber(fNumber, sNumber, tNumber) {
6 | var conut;
7 | var numberRes;
8 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
9 | return Math.floor(Math.pow(10, count-1) + Math.random() * (Math.pow(10, count) - Math.pow(10, count-1)));
10 | }
11 | module.exports = randomNumber;
--------------------------------------------------------------------------------
/random/string.js:
--------------------------------------------------------------------------------
1 | var randomCount = require('./count');
2 | var str = 'abcdefghijklmnopqrstuvwxyz';
3 | var maxBits = 26;
4 | var generalFNumber = 5;
5 | var generalTNumber = 20;
6 | function randomString(fNumber, sNumber, tNumber) {
7 | var count;
8 | var res = '';
9 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
10 | while (count) {
11 | res += str[randomCount(0, ',25', 25)]
12 | count--;
13 | }
14 | return res;
15 | }
16 | module.exports = randomString;
--------------------------------------------------------------------------------
/random/array.js:
--------------------------------------------------------------------------------
1 | var randomCount = require('./count');
2 | var maxBits = 20;
3 | var generalFNumber = 1;
4 | var generalTNumber = 10;
5 | function arrayRandom(arr, fNumber, sNumber, tNumber) {
6 | var count;
7 | var newArr;
8 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
9 | newArr = new Array(count);
10 | for (var i = 0; i < count; i++) {
11 | newArr[i] = arr[0];
12 | }
13 | newArr = newArr.concat(arr.slice(1));
14 | return newArr;
15 | }
16 | module.exports = arrayRandom;
--------------------------------------------------------------------------------
/random/count.js:
--------------------------------------------------------------------------------
1 | function randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits) {
2 | var count;
3 | if (tNumber !== undefined) {
4 | fNumber = Number(fNumber);
5 | tNumber = Number(tNumber);
6 | count = Math.floor(fNumber + Math.random() * (tNumber - fNumber + 1));
7 | }
8 | else if (sNumber !== undefined) {
9 | fNumber = Number(fNumber);
10 | count = Math.floor(fNumber + Math.random() * (maxBits - fNumber + 1));
11 | }
12 | else if (fNumber !== undefined) {
13 | fNumber = Number(fNumber);
14 | count = fNumber;
15 | }
16 | else {
17 | count = Math.floor(generalFNumber + Math.random() * (generalTNumber - generalFNumber + 1));
18 | }
19 | return count;
20 | }
21 | module.exports = randomCount;
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21 | .grunt
22 |
23 | # node-waf configuration
24 | .lock-wscript
25 |
26 | # Compiled binary addons (http://nodejs.org/api/addons.html)
27 | build/Release
28 |
29 | # Dependency directories
30 | node_modules
31 | jspm_packages
32 |
33 | # Optional npm cache directory
34 | .npm
35 |
36 | # Optional REPL history
37 | .node_repl_history
38 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "randomjson",
3 | "version": "1.0.9",
4 | "description": "Generate random json according to condition json",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/zhoushengmufc/randomjson.git"
12 | },
13 | "keywords": [
14 | "randomjson",
15 | "json",
16 | "random",
17 | "random-json",
18 | "makejson"
19 | ],
20 | "author": "zhousheng",
21 | "license": "ISC",
22 | "bugs": {
23 | "url": "https://github.com/zhoushengmufc/randomjson/issues"
24 | },
25 | "homepage": "https://github.com/zhoushengmufc/randomjson#readme",
26 | "dependencies": {
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/random/chinese.js:
--------------------------------------------------------------------------------
1 | var randomCount = require('./count');
2 | // 常用288字
3 | var str = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较长将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海地口东导器压志世金增争';
4 | var maxBits = 288;
5 | var generalFNumber = 5;
6 | var generalTNumber = 20;
7 | function randomString(fNumber, sNumber, tNumber) {
8 | var count;
9 | var res = '';
10 |
11 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
12 | while (count) {
13 | res += str[randomCount(0, ',287', 287)]
14 | count--;
15 | }
16 | return res;
17 | }
18 | module.exports = randomString;
--------------------------------------------------------------------------------
/random/numberRange.js:
--------------------------------------------------------------------------------
1 | function numberRange(minNumber, maxNumber, orNumbers) {
2 | if (minNumber && maxNumber) {
3 | var minDigit = getDigit(minNumber);
4 | var maxDigit = getDigit(maxNumber);
5 | var digit = Math.max(minDigit, maxDigit);
6 | var minNumber = Number(minNumber);
7 | var maxNumber = Number(maxNumber);
8 | var tempMin;
9 | var tempMax;
10 | if (minNumber > maxNumber) {
11 | tempMax = maxNumber;
12 | tempMin = minNumber;
13 | minNumber = tempMax;
14 | maxNumber = tempMin;
15 | }
16 | return parseFloat((minNumber + Math.random() * (maxNumber - minNumber)).toFixed(digit));
17 | }
18 | else {
19 | var orNumbersArr = orNumbers.split(',');
20 | var randomIndex = Math.floor(Math.random() * orNumbersArr.length);
21 | return Number(orNumbersArr[randomIndex]);
22 | }
23 | }
24 | function getDigit(numberStr) {
25 | var numberArr = numberStr.split('.');
26 | if (numberArr.length === 1) {
27 | return 0;
28 | }
29 | else {
30 | return numberArr[1].length;
31 | }
32 | }
33 | module.exports = numberRange;
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 zhousheng
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/example/randomjson.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | test
6 |
7 |
8 |
9 |
18 |
19 |
20 |
21 |
22 |
27 |
85 |
86 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var randomNumber = require('./random/number');
2 | var randomString = require('./random/string');
3 | var randomNull = require('./random/null');
4 | var randomBoolean = require('./random/boolean')
5 | var randomArray = require('./random/array');
6 |
7 | var randomChinese = require('./random/chinese');
8 | var numberRange = require('./random/numberRange');
9 | var randomFloat = require('./random/float');
10 |
11 | var randomImage = require('./random/image');
12 |
13 | // json type
14 | var typeJson = ['number', 'string', 'null', 'boolean', 'array', 'object'];
15 | // custom type
16 | var customType = ['chinese', 'float', 'image', 'url', 'email', 'date', 'tel', 'index'];
17 | // Syntax Character
18 | // var syntaxCharacter = ['*', '+', '?', '[', ']', ',', '{@', '{', '}', '|', '-'];
19 | var syntaxCharacter = ['\\*', '\\+', '\\?', '\\[', '\\]', ',', '<@', '>', '\\{', '\\}', '\\|', '\\-'];
20 |
21 | var typeKeys = typeJson.concat(customType);
22 | // or regexp
23 | var orTxtReg = /\|/;
24 | // Quantifier regexp
25 | var quanReg = /(\{(\d+)(,(\d*))?\})?/;
26 | // numberRange
27 | var numberRangeReg = /\[(?:(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)|(\d+(?:\.\d+)?(?:,(?:\d+(?:\.\d+)?))*))\]/;
28 | // keyReg
29 | var keyReg = new RegExp('(' + typeKeys.join('|') + ')(?:\\{(\\d+)(,(\\d*))?\\})?');
30 | // optionalReg
31 | var optionalReg = new RegExp('(' + '\\[(.*?)\\]' + ')(?:\\{(\\d+)(,(\\d*))?\\})?');
32 | // array Quantifier regexp
33 | var arrQuanReg = /^(.*)<@(?:\{(\d+)(,(\d*))?\})?>/;
34 |
35 | var syntaxSignReg = /<@(.*?)>/g;
36 | // loop json
37 | function main(modelJson) {
38 | var randomJson = {};
39 | readObject('', modelJson, randomJson);
40 | return randomJson;
41 | }
42 | // read object
43 | function readObject(pro, obj, upperObj, bindIndex) {
44 | for (var p in obj) {
45 | if (getJsonType(obj[p]) === 'array') {
46 | var syntaxMatch = p.match(arrQuanReg);
47 | var proStr = '';
48 | if (syntaxMatch !== null) {
49 | proStr = syntaxMatch[1];
50 | }
51 | else {
52 | proStr = p;
53 | }
54 | upperObj[proStr] = [];
55 | readArray(p, obj[p], upperObj[proStr]);
56 | }
57 | else if (getJsonType(obj[p]) === 'object') {
58 | upperObj[p] = {};
59 | readObject(p, obj[p], upperObj[p]);
60 | }
61 | else {
62 | parseCharactor(p, obj[p], upperObj, bindIndex);
63 | }
64 | }
65 | }
66 | // read array
67 | function readArray(key, arr, upperObj) {
68 | var syntaxMatch = key.toString().match(arrQuanReg);
69 | var leftArr;
70 | if (syntaxMatch !== null) {
71 | arr = randomArray(arr, syntaxMatch[2], syntaxMatch[3], syntaxMatch[4]);
72 | }
73 | arr.forEach(function (item, index) {
74 | if (getJsonType(item) === 'object') {
75 | upperObj[index] = {};
76 | readObject(index, item, upperObj[index], index);
77 | }
78 | else if (getJsonType(item) === 'array') {
79 | upperObj[index] = [];
80 | readArray(index, item, upperObj[index]);
81 | }
82 | else {
83 | parseCharactor(index, item, upperObj, index + 1);
84 | }
85 | });
86 | }
87 | // parse charactors
88 | function parseCharactor(keyCha, valueCha, upperObj, bindIndex) {
89 | if (getJsonType(valueCha) === 'null' || getJsonType(valueCha) === 'number' || getJsonType(valueCha) === 'boolean') {
90 | upperObj[keyCha] = valueCha;
91 | return;
92 | }
93 | // var syntaxMatch = valueCha.match(syntaxSignReg);
94 | var syntaxExec = syntaxSignReg.exec(valueCha);
95 | var copyValue = valueCha;
96 | var synTxt = '';
97 | var isSyn = false;
98 | while (syntaxExec) {
99 | isSyn = true;
100 | synTxt = syntaxExec[1];
101 | if (RegExp.rightContext === '' && RegExp.leftContext === '') {
102 | copyValue = handleTxt(synTxt, bindIndex);
103 | }
104 | else {
105 | copyValue = copyValue.replace(syntaxExec[0], handleTxt(synTxt, bindIndex));
106 | }
107 | syntaxExec = syntaxSignReg.exec(valueCha);
108 | }
109 | upperObj[keyCha] = copyValue;
110 | if (!isSyn) {
111 | upperObj[keyCha] = valueCha;
112 | }
113 | }
114 | function handleTxt(synTxt, bindIndex) {
115 | var orMatch = synTxt.match(orTxtReg);
116 | if (orMatch !== null) {
117 | console.log(synTxt);
118 | var orArr = synTxt.split('|');
119 | var orArrLen = orArr.length;
120 | var randomIndex = Math.floor(Math.random() * orArrLen);
121 | synTxt = orArr[randomIndex];
122 | }
123 | var keyRes = synTxt.match(keyReg);
124 | var numberRangeRes = synTxt.match(numberRangeReg);
125 | if (keyRes !== null) {
126 | return randomByType(synTxt, keyRes[1], keyRes[2], keyRes[3], keyRes[4], bindIndex);
127 | }
128 | else if (numberRangeRes !== null) {
129 | return numberRange(numberRangeRes[1], numberRangeRes[2], numberRangeRes[3]);
130 | }
131 | else {
132 | return synTxt;
133 | }
134 | }
135 | function randomByType(synTxt, keyType, fNumber, sNumber, tNumber, bindIndex) {
136 | if (keyType === 'number') {
137 | return randomNumber(fNumber, sNumber, tNumber);
138 | }
139 | else if (keyType === 'string') {
140 | return randomString(fNumber, sNumber, tNumber);
141 | }
142 | else if (keyType === 'boolean') {
143 | return randomBoolean();
144 | }
145 | else if (keyType === 'null') {
146 | return randomNull();
147 | }
148 | else if (keyType === 'chinese') {
149 | return randomChinese(fNumber, sNumber, tNumber);
150 | }
151 | else if (keyType === 'index') {
152 | return bindIndex + 1;
153 | }
154 | else if (keyType === 'float') {
155 | return randomFloat(fNumber, tNumber);
156 | }
157 | else if (keyType === 'image') {
158 | return randomImage(fNumber, sNumber, tNumber);
159 | }
160 | else {
161 | return synTxt;
162 | }
163 | }
164 | // get json type
165 | function getJsonType(arg1) {
166 | if (arg1 === null) {
167 | return 'null';
168 | }
169 | else if (typeof arg1 === 'string') {
170 | return 'string';
171 | }
172 | else if (typeof arg1 === 'number') {
173 | return 'number';
174 | }
175 | else if (typeof arg1 === 'boolean') {
176 | return 'boolean';
177 | }
178 | else if (Object.prototype.toString.call(arg1) === '[object Array]') {
179 | return 'array';
180 | }
181 | else if (Object.prototype.toString.call(arg1) === '[object Object]') {
182 | return 'object';
183 | }
184 | else {
185 | throw new Error('illegal type');
186 | }
187 | }
188 |
189 | module.exports = main;
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 中文文档在下面
2 |
3 |
4 |
5 | # randomjson
6 |
7 | Generate random json according to condition json
8 |
9 | ## how to use
10 |
11 | ### install
12 |
13 | npm install randomjson
14 |
15 | Or direct reference to the output file:
181 |
182 | ### 用法
183 |
184 | ```javascript
185 |
186 | // 在amd,cmd环境中,引用包,在浏览器中无需引用
187 |
188 | var randomjson = require('randomjson');
189 |
190 | // 模型
191 | var modelJson = {
192 | "code": "00",
193 | "numberCode": "<@[10000,20000]>",
194 | "msg": "<@chinese{12,50}>",
195 | "msg2": "<@string{2,3}>",
196 | "logo": "<@image{100,100}>",
197 | "result": {
198 | "pList<@{1,3}>":[
199 | {
200 | "indexToString": "<@index><@>",
201 | "index": "<@index>",
202 | "id": "<@[1-5]>",
203 | "price": "<@float>",
204 | "name": "公司名称<@index>",
205 | "person": "李文武<@index>",
206 | "address": "北京市海淀区西三旗",
207 | "mobile": "1<@number{10}>",
208 | "tel": "<@number{4}>-<@number{8}>",
209 | "list": [
210 | {
211 | "auditKey": 1,
212 | "auditValue": "<@[0,1,2]>"
213 | },
214 | {
215 | "auditKey": 2,
216 | "auditValue": "<@[0,1,2]>"
217 | }
218 | ]
219 | }
220 | ]
221 | }
222 | }
223 | // 根据模型生成json
224 | var myJson = randomjson(modelJson);
225 |
226 | 根据上边模型生成的json可能是这样:
227 |
228 | {
229 | "code": "00",
230 | "numberCode": 10000,
231 | "msg": "加义为边平压你治提用根治问求只或程干立农资特",
232 | "msg2": "dv",
233 | "logo": "https://dummyimage.com/100x100",
234 | "result": {
235 | "pList": [
236 | {
237 | "indexToString": "1",
238 | "index": 1,
239 | "id": 2,
240 | "price": 93.78,
241 | "name": "公司名称1",
242 | "person": "李文武1",
243 | "address": "北京市海淀区西三旗",
244 | "mobile": "17929438781",
245 | "tel": "1148-56055642",
246 | "list": [
247 | {
248 | "auditKey": 1,
249 | "auditValue": 0
250 | },
251 | {
252 | "auditKey": 2,
253 | "auditValue": 1
254 | }
255 | ]
256 | },
257 | {
258 | "indexToString": "2",
259 | "index": 2,
260 | "id": 5,
261 | "price": 29.49,
262 | "name": "公司名称2",
263 | "person": "李文武2",
264 | "address": "北京市海淀区西三旗",
265 | "mobile": "17826945504",
266 | "tel": "7298-46226026",
267 | "list": [
268 | {
269 | "auditKey": 1,
270 | "auditValue": 0
271 | },
272 | {
273 | "auditKey": 2,
274 | "auditValue": 0
275 | }
276 | ]
277 | }
278 | ]
279 | }
280 | }
281 |
282 | ```
283 |
284 | ## 如果你需要编译到dist
285 | ```javascript
286 | npm install -g webpack
287 | webpack --entry ./index.js --output-path dist --output-filename dist.js --output-library randomjson --output-library-target umd
288 | ```
289 |
290 | ## 例子 :http://zhoushengfe.com/random/example/randomjson.html 可以在线编辑查看
291 |
292 |
293 | ## 词法
294 |
295 | 以<@开始,以>结束,中间内容是randomjson的词法
296 |
297 | ## 模型定义
298 |
299 | ### 数据类型
300 |
301 | "<@number>": number类型
302 |
303 | "<@string>": string类型
304 |
305 | "<@null>": null
306 |
307 | "<@boolean>": boolean类型
308 |
309 | "<@chinese>": 中文字符串
310 |
311 | "<@float{number1,number2}>": 浮点数 number1代表整数位数,number2代表小数位数,默认都为2
312 |
313 |
314 | "<@image{width,height}>": 生成图片 width为生成图片宽度,height为生成图片高度,默认为400,400
315 |
316 | "<@index>": 元素在数组中的位置,从1开始
317 |
318 | ### 量词
319 |
320 | {minNumber, maxNumber}: minNumber到maxNumber个
321 |
322 | {minNumber,}: 最少minNumber
323 |
324 | {number}: number个
325 |
326 | 如果是float,minNumber, maxNumber表示整数部分和小数部分的位数
327 |
328 | 如果是imgae,minNumber, maxNumber表示图片宽度高度
329 |
330 | ### 随机生成其中之一
331 |
332 | 你可以使用“|” 分离多个选项,随机值是其中之一,值为字符串
333 |
334 | ### 数字范围
335 |
336 | [1,2,3] 表示1,2,3中的一个,值为数字
337 |
338 | [1-90] 表示1到90中的一个int值,值为数字
339 |
340 | [1.00-3.00] 表示1到3之间的2位小数
341 |
342 |
343 |
344 |
345 |
346 | ### 数字转字符串
347 |
348 | 在number类型后加空的占位符
349 |
350 | "indexToString": "<@index><@>"
351 |
352 | ### 量词定义注意点
353 |
354 | 值为非数组时,长度在value字符串里,例如:"ret": "<@number{4}>"
355 |
356 | 值为数组时,长度在key里,例如:
357 | ```javascript
358 | "p11<@{2,5}>": [{
359 | "p8": "12312",
360 | "p9": ["<@string{4,7}>"],
361 | "p10": "<@string>"
362 | }]
363 | ```
364 |
--------------------------------------------------------------------------------
/example/jsoneditor.css:
--------------------------------------------------------------------------------
1 | .jsoneditor .field,
2 | .jsoneditor .value,
3 | .jsoneditor .readonly {
4 | border: 1px solid transparent;
5 | min-height: 16px;
6 | min-width: 32px;
7 | padding: 2px;
8 | margin: 1px;
9 | word-wrap: break-word;
10 | float: left;
11 | }
12 |
13 | /* adjust margin of p elements inside editable divs, needed for Opera, IE */
14 |
15 | .jsoneditor .field p,
16 | .jsoneditor .value p {
17 | margin: 0;
18 | }
19 |
20 | .jsoneditor .value {
21 | word-break: break-word;
22 | }
23 |
24 | .jsoneditor .readonly {
25 | min-width: 16px;
26 | color: gray;
27 | }
28 |
29 | .jsoneditor .empty {
30 | border-color: lightgray;
31 | border-style: dashed;
32 | border-radius: 2px;
33 | }
34 |
35 | .jsoneditor .field.empty {
36 | background-image: url("img/jsoneditor-icons.png");
37 | background-position: 0 -144px;
38 | }
39 |
40 | .jsoneditor .value.empty {
41 | background-image: url("img/jsoneditor-icons.png");
42 | background-position: -48px -144px;
43 | }
44 |
45 | .jsoneditor .value.url {
46 | color: green;
47 | text-decoration: underline;
48 | }
49 |
50 | .jsoneditor a.value.url:hover,
51 | .jsoneditor a.value.url:focus {
52 | color: red;
53 | }
54 |
55 | .jsoneditor .separator {
56 | padding: 3px 0;
57 | vertical-align: top;
58 | color: gray;
59 | }
60 |
61 | .jsoneditor .field[contenteditable=true]:focus,
62 | .jsoneditor .field[contenteditable=true]:hover,
63 | .jsoneditor .value[contenteditable=true]:focus,
64 | .jsoneditor .value[contenteditable=true]:hover,
65 | .jsoneditor .field.highlight,
66 | .jsoneditor .value.highlight {
67 | background-color: #FFFFAB;
68 | border: 1px solid yellow;
69 | border-radius: 2px;
70 | }
71 |
72 | .jsoneditor .field.highlight-active,
73 | .jsoneditor .field.highlight-active:focus,
74 | .jsoneditor .field.highlight-active:hover,
75 | .jsoneditor .value.highlight-active,
76 | .jsoneditor .value.highlight-active:focus,
77 | .jsoneditor .value.highlight-active:hover {
78 | background-color: #ffee00;
79 | border: 1px solid #ffc700;
80 | border-radius: 2px;
81 | }
82 |
83 | .jsoneditor div.tree button {
84 | width: 24px;
85 | height: 24px;
86 | padding: 0;
87 | margin: 0;
88 | border: none;
89 | cursor: pointer;
90 | background: transparent url("img/jsoneditor-icons.png");
91 | }
92 |
93 | .jsoneditor div.tree button.collapsed {
94 | background-position: 0 -48px;
95 | }
96 |
97 | .jsoneditor div.tree button.expanded {
98 | background-position: 0 -72px;
99 | }
100 |
101 | .jsoneditor div.tree button.contextmenu {
102 | background-position: -48px -72px;
103 | }
104 |
105 | .jsoneditor div.tree button.contextmenu:hover,
106 | .jsoneditor div.tree button.contextmenu:focus,
107 | .jsoneditor div.tree button.contextmenu.selected {
108 | background-position: -48px -48px;
109 | }
110 |
111 | .jsoneditor div.tree *:focus {
112 | outline: none;
113 | }
114 |
115 | .jsoneditor div.tree button:focus {
116 | /* TODO: nice outline for buttons with focus
117 | outline: #97B0F8 solid 2px;
118 | box-shadow: 0 0 8px #97B0F8;
119 | */
120 | background-color: #f5f5f5;
121 | outline: #e5e5e5 solid 1px;
122 | }
123 |
124 | .jsoneditor div.tree button.invisible {
125 | visibility: hidden;
126 | background: none;
127 | }
128 |
129 | .jsoneditor {
130 | color: #1A1A1A;
131 | border: 1px solid #97B0F8;
132 | -moz-box-sizing: border-box;
133 | -webkit-box-sizing: border-box;
134 | box-sizing: border-box;
135 | width: 100%;
136 | height: 100%;
137 | overflow: auto;
138 | position: relative;
139 | padding: 0;
140 | line-height: 100%;
141 | }
142 |
143 | .jsoneditor div.tree table.tree {
144 | border-collapse: collapse;
145 | border-spacing: 0;
146 | width: 100%;
147 | margin: 0;
148 | }
149 |
150 | .jsoneditor div.outer {
151 | width: 100%;
152 | height: 100%;
153 | margin: -35px 0 0 0;
154 | padding: 35px 0 0 0;
155 | -moz-box-sizing: border-box;
156 | -webkit-box-sizing: border-box;
157 | box-sizing: border-box;
158 | overflow: hidden;
159 | }
160 |
161 | .jsoneditor div.tree {
162 | width: 100%;
163 | height: 100%;
164 | position: relative;
165 | overflow: auto;
166 | }
167 |
168 | .jsoneditor textarea.text {
169 | width: 100%;
170 | height: 100%;
171 | margin: 0;
172 | -moz-box-sizing: border-box;
173 | -webkit-box-sizing: border-box;
174 | box-sizing: border-box;
175 | border: none;
176 | background-color: white;
177 | resize: none;
178 | }
179 |
180 | .jsoneditor tr.highlight {
181 | background-color: #FFFFAB;
182 | }
183 |
184 | .jsoneditor div.tree button.dragarea {
185 | background: url("img/jsoneditor-icons.png") -72px -72px;
186 | cursor: move;
187 | }
188 |
189 | .jsoneditor div.tree button.dragarea:hover,
190 | .jsoneditor div.tree button.dragarea:focus {
191 | background-position: -72px -48px;
192 | }
193 |
194 | .jsoneditor tr,
195 | .jsoneditor th,
196 | .jsoneditor td {
197 | padding: 0;
198 | margin: 0;
199 | }
200 |
201 | .jsoneditor td {
202 | vertical-align: top;
203 | }
204 |
205 | .jsoneditor td.tree {
206 | vertical-align: top;
207 | }
208 |
209 | .jsoneditor .field,
210 | .jsoneditor .value,
211 | .jsoneditor td,
212 | .jsoneditor th,
213 | .jsoneditor textarea {
214 | font-family: droid sans mono, consolas, monospace, courier new, courier, sans-serif;
215 | font-size: 10pt;
216 | color: #1A1A1A;
217 | }
218 | /* ContextMenu - main menu */
219 |
220 | .jsoneditor-contextmenu {
221 | position: absolute;
222 | z-index: 99999;
223 | }
224 |
225 | .jsoneditor-contextmenu ul {
226 | position: relative;
227 | left: 0;
228 | top: 0;
229 | width: 124px;
230 | background: white;
231 | border: 1px solid #d3d3d3;
232 | box-shadow: 2px 2px 12px rgba(128, 128, 128, 0.3);
233 | list-style: none;
234 | margin: 0;
235 | padding: 0;
236 | }
237 |
238 | .jsoneditor-contextmenu ul li button {
239 | padding: 0;
240 | margin: 0;
241 | width: 124px;
242 | height: 24px;
243 | border: none;
244 | cursor: pointer;
245 | color: #4d4d4d;
246 | background: transparent;
247 | line-height: 26px;
248 | text-align: left;
249 | }
250 |
251 | /* Fix button padding in firefox */
252 |
253 | .jsoneditor-contextmenu ul li button::-moz-focus-inner {
254 | padding: 0;
255 | border: 0;
256 | }
257 |
258 | .jsoneditor-contextmenu ul li button:hover,
259 | .jsoneditor-contextmenu ul li button:focus {
260 | color: #1a1a1a;
261 | background-color: #f5f5f5;
262 | outline: none;
263 | }
264 |
265 | .jsoneditor-contextmenu ul li button.default {
266 | width: 92px;
267 | }
268 |
269 | .jsoneditor-contextmenu ul li button.expand {
270 | float: right;
271 | width: 32px;
272 | height: 24px;
273 | border-left: 1px solid #e5e5e5;
274 | }
275 |
276 | .jsoneditor-contextmenu div.icon {
277 | float: left;
278 | width: 24px;
279 | height: 24px;
280 | border: none;
281 | padding: 0;
282 | margin: 0;
283 | background-image: url("img/jsoneditor-icons.png");
284 | }
285 |
286 | .jsoneditor-contextmenu ul li button div.expand {
287 | float: right;
288 | width: 24px;
289 | height: 24px;
290 | padding: 0;
291 | margin: 0 4px 0 0;
292 | background: url("img/jsoneditor-icons.png") 0 -72px;
293 | opacity: 0.4;
294 | }
295 |
296 | .jsoneditor-contextmenu ul li button:hover div.expand,
297 | .jsoneditor-contextmenu ul li button:focus div.expand,
298 | .jsoneditor-contextmenu ul li.selected div.expand,
299 | .jsoneditor-contextmenu ul li button.expand:hover div.expand,
300 | .jsoneditor-contextmenu ul li button.expand:focus div.expand {
301 | opacity: 1;
302 | }
303 |
304 | .jsoneditor-contextmenu .separator {
305 | height: 0;
306 | border-top: 1px solid #e5e5e5;
307 | padding-top: 5px;
308 | margin-top: 5px;
309 | }
310 |
311 | .jsoneditor-contextmenu button.remove > .icon {
312 | background-position: -24px -24px;
313 | }
314 |
315 | .jsoneditor-contextmenu button.remove:hover > .icon,
316 | .jsoneditor-contextmenu button.remove:focus > .icon {
317 | background-position: -24px 0;
318 | }
319 |
320 | .jsoneditor-contextmenu button.append > .icon {
321 | background-position: 0 -24px;
322 | }
323 |
324 | .jsoneditor-contextmenu button.append:hover > .icon,
325 | .jsoneditor-contextmenu button.append:focus > .icon {
326 | background-position: 0 0;
327 | }
328 |
329 | .jsoneditor-contextmenu button.insert > .icon {
330 | background-position: 0 -24px;
331 | }
332 |
333 | .jsoneditor-contextmenu button.insert:hover > .icon,
334 | .jsoneditor-contextmenu button.insert:focus > .icon {
335 | background-position: 0 0;
336 | }
337 |
338 | .jsoneditor-contextmenu button.duplicate > .icon {
339 | background-position: -48px -24px;
340 | }
341 |
342 | .jsoneditor-contextmenu button.duplicate:hover > .icon,
343 | .jsoneditor-contextmenu button.duplicate:focus > .icon {
344 | background-position: -48px 0;
345 | }
346 |
347 | .jsoneditor-contextmenu button.sort-asc > .icon {
348 | background-position: -168px -24px;
349 | }
350 |
351 | .jsoneditor-contextmenu button.sort-asc:hover > .icon,
352 | .jsoneditor-contextmenu button.sort-asc:focus > .icon {
353 | background-position: -168px 0;
354 | }
355 |
356 | .jsoneditor-contextmenu button.sort-desc > .icon {
357 | background-position: -192px -24px;
358 | }
359 |
360 | .jsoneditor-contextmenu button.sort-desc:hover > .icon,
361 | .jsoneditor-contextmenu button.sort-desc:focus > .icon {
362 | background-position: -192px 0;
363 | }
364 |
365 | /* ContextMenu - sub menu */
366 |
367 | .jsoneditor-contextmenu ul li .selected {
368 | background-color: #D5DDF6;
369 | }
370 |
371 | .jsoneditor-contextmenu ul li {
372 | overflow: hidden;
373 | }
374 |
375 | .jsoneditor-contextmenu ul li ul {
376 | display: none;
377 | position: relative;
378 | left: -10px;
379 | top: 0;
380 | border: none;
381 | box-shadow: inset 0 0 10px rgba(128, 128, 128, 0.5);
382 | padding: 0 10px;
383 | /* TODO: transition is not supported on IE8-9 */
384 | -webkit-transition: all 0.3s ease-out;
385 | -moz-transition: all 0.3s ease-out;
386 | -o-transition: all 0.3s ease-out;
387 | transition: all 0.3s ease-out;
388 | }
389 |
390 |
391 |
392 | .jsoneditor-contextmenu ul li ul li button {
393 | padding-left: 24px;
394 | }
395 |
396 | .jsoneditor-contextmenu ul li ul li button:hover,
397 | .jsoneditor-contextmenu ul li ul li button:focus {
398 | background-color: #f5f5f5;
399 | }
400 |
401 | .jsoneditor-contextmenu button.type-string > .icon {
402 | background-position: -144px -24px;
403 | }
404 |
405 | .jsoneditor-contextmenu button.type-string:hover > .icon,
406 | .jsoneditor-contextmenu button.type-string:focus > .icon,
407 | .jsoneditor-contextmenu button.type-string.selected > .icon {
408 | background-position: -144px 0;
409 | }
410 |
411 | .jsoneditor-contextmenu button.type-auto > .icon {
412 | background-position: -120px -24px;
413 | }
414 |
415 | .jsoneditor-contextmenu button.type-auto:hover > .icon,
416 | .jsoneditor-contextmenu button.type-auto:focus > .icon,
417 | .jsoneditor-contextmenu button.type-auto.selected > .icon {
418 | background-position: -120px 0;
419 | }
420 |
421 | .jsoneditor-contextmenu button.type-object > .icon {
422 | background-position: -72px -24px;
423 | }
424 |
425 | .jsoneditor-contextmenu button.type-object:hover > .icon,
426 | .jsoneditor-contextmenu button.type-object:focus > .icon,
427 | .jsoneditor-contextmenu button.type-object.selected > .icon {
428 | background-position: -72px 0;
429 | }
430 |
431 | .jsoneditor-contextmenu button.type-array > .icon {
432 | background-position: -96px -24px;
433 | }
434 |
435 | .jsoneditor-contextmenu button.type-array:hover > .icon,
436 | .jsoneditor-contextmenu button.type-array:focus > .icon,
437 | .jsoneditor-contextmenu button.type-array.selected > .icon {
438 | background-position: -96px 0;
439 | }
440 |
441 | .jsoneditor-contextmenu button.type-modes > .icon {
442 | background-image: none;
443 | width: 6px;
444 | }
445 | .jsoneditor .menu {
446 | width: 100%;
447 | height: 35px;
448 | padding: 2px;
449 | margin: 0;
450 | overflow: hidden;
451 | -moz-box-sizing: border-box;
452 | -webkit-box-sizing: border-box;
453 | box-sizing: border-box;
454 | color: #1A1A1A;
455 | background-color: #D5DDF6;
456 | border-bottom: 1px solid #97B0F8;
457 | }
458 |
459 | .jsoneditor .menu button {
460 | width: 26px;
461 | height: 26px;
462 | margin: 2px;
463 | padding: 0;
464 | border-radius: 2px;
465 | border: 1px solid #aec0f8;
466 | background: #e3eaf6 url("img/jsoneditor-icons.png");
467 | color: #4D4D4D;
468 | opacity: 0.8;
469 | font-family: arial, sans-serif;
470 | font-size: 10pt;
471 | float: left;
472 | }
473 |
474 | .jsoneditor .menu button:hover {
475 | background-color: #f0f2f5;
476 | }
477 |
478 | .jsoneditor .menu button:focus,
479 | .jsoneditor .menu button:active {
480 | background-color: #ffffff;
481 | }
482 |
483 | .jsoneditor .menu button:disabled {
484 | background-color: #e3eaf6;
485 | }
486 |
487 | .jsoneditor .menu button.collapse-all {
488 | background-position: 0 -96px;
489 | }
490 |
491 | .jsoneditor .menu button.expand-all {
492 | background-position: 0 -120px;
493 | }
494 |
495 | .jsoneditor .menu button.undo {
496 | background-position: -24px -96px;
497 | }
498 |
499 | .jsoneditor .menu button.undo:disabled {
500 | background-position: -24px -120px;
501 | }
502 |
503 | .jsoneditor .menu button.redo {
504 | background-position: -48px -96px;
505 | }
506 |
507 | .jsoneditor .menu button.redo:disabled {
508 | background-position: -48px -120px;
509 | }
510 |
511 | .jsoneditor .menu button.compact {
512 | background-position: -72px -96px;
513 | }
514 |
515 | .jsoneditor .menu button.format {
516 | background-position: -72px -120px;
517 | }
518 |
519 | .jsoneditor .menu button.modes {
520 | background-image: none;
521 | width: auto;
522 | padding-left: 6px;
523 | padding-right: 6px;
524 | }
525 |
526 | .jsoneditor .menu button.separator {
527 | margin-left: 10px;
528 | }
529 |
530 | .jsoneditor .menu a {
531 | font-family: arial, sans-serif;
532 | font-size: 10pt;
533 | color: #97B0F8;
534 | vertical-align: middle;
535 | }
536 |
537 | .jsoneditor .menu a:hover {
538 | color: red;
539 | }
540 |
541 | .jsoneditor .menu a.poweredBy {
542 | font-size: 8pt;
543 | position: absolute;
544 | right: 0;
545 | top: 0;
546 | padding: 10px;
547 | }
548 |
549 | /* TODO: css for button:disabled is not supported by IE8 */
550 | .jsoneditor .search input,
551 | .jsoneditor .search .results {
552 | font-family: arial, sans-serif;
553 | font-size: 10pt;
554 | color: #1A1A1A;
555 | background: transparent;
556 | /* For Firefox */
557 | }
558 |
559 | .jsoneditor .search {
560 | position: absolute;
561 | right: 2px;
562 | top: 2px;
563 | }
564 |
565 | .jsoneditor .search .frame {
566 | border: 1px solid #97B0F8;
567 | background-color: white;
568 | padding: 0 2px;
569 | margin: 0;
570 | }
571 |
572 | .jsoneditor .search .frame table {
573 | border-collapse: collapse;
574 | }
575 |
576 | .jsoneditor .search input {
577 | width: 120px;
578 | border: none;
579 | outline: none;
580 | margin: 1px;
581 | }
582 |
583 | .jsoneditor .search .results {
584 | color: #4d4d4d;
585 | padding-right: 5px;
586 | line-height: 24px;
587 | }
588 |
589 | .jsoneditor .search button {
590 | width: 16px;
591 | height: 24px;
592 | padding: 0;
593 | margin: 0;
594 | border: none;
595 | background: url("img/jsoneditor-icons.png");
596 | vertical-align: top;
597 | }
598 |
599 | .jsoneditor .search button:hover {
600 | background-color: transparent;
601 | }
602 |
603 | .jsoneditor .search button.refresh {
604 | width: 18px;
605 | background-position: -99px -73px;
606 | }
607 |
608 | .jsoneditor .search button.next {
609 | cursor: pointer;
610 | background-position: -124px -73px;
611 | }
612 |
613 | .jsoneditor .search button.next:hover {
614 | background-position: -124px -49px;
615 | }
616 |
617 | .jsoneditor .search button.previous {
618 | cursor: pointer;
619 | background-position: -148px -73px;
620 | margin-right: 2px;
621 | }
622 |
623 | .jsoneditor .search button.previous:hover {
624 | background-position: -148px -49px;
625 | }
--------------------------------------------------------------------------------
/dist/dist.js:
--------------------------------------------------------------------------------
1 | (function webpackUniversalModuleDefinition(root, factory) {
2 | if(typeof exports === 'object' && typeof module === 'object')
3 | module.exports = factory();
4 | else if(typeof define === 'function' && define.amd)
5 | define([], factory);
6 | else if(typeof exports === 'object')
7 | exports["randomjson"] = factory();
8 | else
9 | root["randomjson"] = factory();
10 | })(this, function() {
11 | return /******/ (function(modules) { // webpackBootstrap
12 | /******/ // The module cache
13 | /******/ var installedModules = {};
14 | /******/
15 | /******/ // The require function
16 | /******/ function __webpack_require__(moduleId) {
17 | /******/
18 | /******/ // Check if module is in cache
19 | /******/ if(installedModules[moduleId])
20 | /******/ return installedModules[moduleId].exports;
21 | /******/
22 | /******/ // Create a new module (and put it into the cache)
23 | /******/ var module = installedModules[moduleId] = {
24 | /******/ i: moduleId,
25 | /******/ l: false,
26 | /******/ exports: {}
27 | /******/ };
28 | /******/
29 | /******/ // Execute the module function
30 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31 | /******/
32 | /******/ // Flag the module as loaded
33 | /******/ module.l = true;
34 | /******/
35 | /******/ // Return the exports of the module
36 | /******/ return module.exports;
37 | /******/ }
38 | /******/
39 | /******/
40 | /******/ // expose the modules object (__webpack_modules__)
41 | /******/ __webpack_require__.m = modules;
42 | /******/
43 | /******/ // expose the module cache
44 | /******/ __webpack_require__.c = installedModules;
45 | /******/
46 | /******/ // identity function for calling harmony imports with the correct context
47 | /******/ __webpack_require__.i = function(value) { return value; };
48 | /******/
49 | /******/ // define getter function for harmony exports
50 | /******/ __webpack_require__.d = function(exports, name, getter) {
51 | /******/ if(!__webpack_require__.o(exports, name)) {
52 | /******/ Object.defineProperty(exports, name, {
53 | /******/ configurable: false,
54 | /******/ enumerable: true,
55 | /******/ get: getter
56 | /******/ });
57 | /******/ }
58 | /******/ };
59 | /******/
60 | /******/ // getDefaultExport function for compatibility with non-harmony modules
61 | /******/ __webpack_require__.n = function(module) {
62 | /******/ var getter = module && module.__esModule ?
63 | /******/ function getDefault() { return module['default']; } :
64 | /******/ function getModuleExports() { return module; };
65 | /******/ __webpack_require__.d(getter, 'a', getter);
66 | /******/ return getter;
67 | /******/ };
68 | /******/
69 | /******/ // Object.prototype.hasOwnProperty.call
70 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
71 | /******/
72 | /******/ // __webpack_public_path__
73 | /******/ __webpack_require__.p = "";
74 | /******/
75 | /******/ // Load entry module and return exports
76 | /******/ return __webpack_require__(__webpack_require__.s = 10);
77 | /******/ })
78 | /************************************************************************/
79 | /******/ ([
80 | /* 0 */
81 | /***/ (function(module, exports) {
82 |
83 | function randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits) {
84 | var count;
85 | if (tNumber !== undefined) {
86 | fNumber = Number(fNumber);
87 | tNumber = Number(tNumber);
88 | count = Math.floor(fNumber + Math.random() * (tNumber - fNumber + 1));
89 | }
90 | else if (sNumber !== undefined) {
91 | fNumber = Number(fNumber);
92 | count = Math.floor(fNumber + Math.random() * (maxBits - fNumber + 1));
93 | }
94 | else if (fNumber !== undefined) {
95 | fNumber = Number(fNumber);
96 | count = fNumber;
97 | }
98 | else {
99 | count = Math.floor(generalFNumber + Math.random() * (generalTNumber - generalFNumber + 1));
100 | }
101 | return count;
102 | }
103 | module.exports = randomCount;
104 |
105 | /***/ }),
106 | /* 1 */
107 | /***/ (function(module, exports, __webpack_require__) {
108 |
109 | var randomCount = __webpack_require__(0);
110 | var maxBits = 20;
111 | var generalFNumber = 1;
112 | var generalTNumber = 10;
113 | function arrayRandom(arr, fNumber, sNumber, tNumber) {
114 | var count;
115 | var newArr;
116 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
117 | newArr = new Array(count);
118 | for (var i = 0; i < count; i++) {
119 | newArr[i] = arr[0];
120 | }
121 | newArr = newArr.concat(arr.slice(1));
122 | return newArr;
123 | }
124 | module.exports = arrayRandom;
125 |
126 | /***/ }),
127 | /* 2 */
128 | /***/ (function(module, exports) {
129 |
130 | function randomBoolean() {
131 | return (Math.random() > 0.5? true: false);
132 | }
133 | module.exports = randomBoolean;
134 |
135 | /***/ }),
136 | /* 3 */
137 | /***/ (function(module, exports, __webpack_require__) {
138 |
139 | var randomCount = __webpack_require__(0);
140 | // 常用288字
141 | var str = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较长将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海地口东导器压志世金增争';
142 | var maxBits = 288;
143 | var generalFNumber = 5;
144 | var generalTNumber = 20;
145 | function randomString(fNumber, sNumber, tNumber) {
146 | var count;
147 | var res = '';
148 |
149 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
150 | while (count) {
151 | res += str[randomCount(0, ',287', 287)]
152 | count--;
153 | }
154 | return res;
155 | }
156 | module.exports = randomString;
157 |
158 | /***/ }),
159 | /* 4 */
160 | /***/ (function(module, exports) {
161 |
162 | function randomFloat(intDigit, decDigit) {
163 | var intDigit = intDigit? intDigit: 2;
164 | var decDigit = decDigit? decDigit: 2;
165 | var intNumber = Math.floor(Math.random() * Math.pow(10, intDigit));
166 | return intNumber + parseFloat(Math.random().toFixed(decDigit));
167 | }
168 | module.exports = randomFloat;
169 |
170 | /***/ }),
171 | /* 5 */
172 | /***/ (function(module, exports) {
173 |
174 | var defaultWidth = 400;
175 | var defaultHeight = 400;
176 | function randomImage(width, sNumber, height) {
177 | var iWidth = width? width: defaultWidth;
178 | var iHeight = height? height: defaultHeight;
179 | return 'https://dummyimage.com/' + iWidth + 'x' + iHeight;
180 | }
181 | module.exports = randomImage;
182 |
183 |
184 |
185 | /***/ }),
186 | /* 6 */
187 | /***/ (function(module, exports) {
188 |
189 | function randomNull() {
190 | return null;
191 | }
192 | module.exports = randomNull;
193 |
194 | /***/ }),
195 | /* 7 */
196 | /***/ (function(module, exports, __webpack_require__) {
197 |
198 | var randomCount = __webpack_require__(0);
199 | var maxBits = 308;
200 | var generalFNumber = 1;
201 | var generalTNumber = 10;
202 | function randomNumber(fNumber, sNumber, tNumber) {
203 | var conut;
204 | var numberRes;
205 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
206 | return Math.floor(Math.pow(10, count-1) + Math.random() * (Math.pow(10, count) - Math.pow(10, count-1)));
207 | }
208 | module.exports = randomNumber;
209 |
210 | /***/ }),
211 | /* 8 */
212 | /***/ (function(module, exports) {
213 |
214 | function numberRange(minNumber, maxNumber, orNumbers) {
215 | if (minNumber && maxNumber) {
216 | var minDigit = getDigit(minNumber);
217 | var maxDigit = getDigit(maxNumber);
218 | var digit = Math.max(minDigit, maxDigit);
219 | var minNumber = Number(minNumber);
220 | var maxNumber = Number(maxNumber);
221 | var tempMin;
222 | var tempMax;
223 | if (minNumber > maxNumber) {
224 | tempMax = maxNumber;
225 | tempMin = minNumber;
226 | minNumber = tempMax;
227 | maxNumber = tempMin;
228 | }
229 | return parseFloat((minNumber + Math.random() * (maxNumber - minNumber)).toFixed(digit));
230 | }
231 | else {
232 | var orNumbersArr = orNumbers.split(',');
233 | var randomIndex = Math.floor(Math.random() * orNumbersArr.length);
234 | return Number(orNumbersArr[randomIndex]);
235 | }
236 | }
237 | function getDigit(numberStr) {
238 | var numberArr = numberStr.split('.');
239 | if (numberArr.length === 1) {
240 | return 0;
241 | }
242 | else {
243 | return numberArr[1].length;
244 | }
245 | }
246 | module.exports = numberRange;
247 |
248 | /***/ }),
249 | /* 9 */
250 | /***/ (function(module, exports, __webpack_require__) {
251 |
252 | var randomCount = __webpack_require__(0);
253 | var str = 'abcdefghijklmnopqrstuvwxyz';
254 | var maxBits = 26;
255 | var generalFNumber = 5;
256 | var generalTNumber = 20;
257 | function randomString(fNumber, sNumber, tNumber) {
258 | var count;
259 | var res = '';
260 | count = randomCount(fNumber, sNumber, tNumber, generalFNumber, generalTNumber, maxBits);
261 | while (count) {
262 | res += str[randomCount(0, ',25', 25)]
263 | count--;
264 | }
265 | return res;
266 | }
267 | module.exports = randomString;
268 |
269 | /***/ }),
270 | /* 10 */
271 | /***/ (function(module, exports, __webpack_require__) {
272 |
273 | var randomNumber = __webpack_require__(7);
274 | var randomString = __webpack_require__(9);
275 | var randomNull = __webpack_require__(6);
276 | var randomBoolean = __webpack_require__(2)
277 | var randomArray = __webpack_require__(1);
278 |
279 | var randomChinese = __webpack_require__(3);
280 | var numberRange = __webpack_require__(8);
281 | var randomFloat = __webpack_require__(4);
282 |
283 | var randomImage = __webpack_require__(5);
284 |
285 | // json type
286 | var typeJson = ['number', 'string', 'null', 'boolean', 'array', 'object'];
287 | // custom type
288 | var customType = ['chinese', 'float', 'image', 'url', 'email', 'date', 'tel', 'index'];
289 | // Syntax Character
290 | // var syntaxCharacter = ['*', '+', '?', '[', ']', ',', '{@', '{', '}', '|', '-'];
291 | var syntaxCharacter = ['\\*', '\\+', '\\?', '\\[', '\\]', ',', '<@', '>', '\\{', '\\}', '\\|', '\\-'];
292 |
293 | var typeKeys = typeJson.concat(customType);
294 | // or regexp
295 | var orTxtReg = /\|/;
296 | // Quantifier regexp
297 | var quanReg = /(\{(\d+)(,(\d*))?\})?/;
298 | // numberRange
299 | var numberRangeReg = /\[(?:(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)|(\d+(?:\.\d+)?(?:,(?:\d+(?:\.\d+)?))*))\]/;
300 | // keyReg
301 | var keyReg = new RegExp('(' + typeKeys.join('|') + ')(?:\\{(\\d+)(,(\\d*))?\\})?');
302 | // optionalReg
303 | var optionalReg = new RegExp('(' + '\\[(.*?)\\]' + ')(?:\\{(\\d+)(,(\\d*))?\\})?');
304 | // array Quantifier regexp
305 | var arrQuanReg = /^(.*)<@(?:\{(\d+)(,(\d*))?\})?>/;
306 |
307 | var syntaxSignReg = /<@(.*?)>/g;
308 | // loop json
309 | function main(modelJson) {
310 | var randomJson = {};
311 | readObject('', modelJson, randomJson);
312 | return randomJson;
313 | }
314 | // read object
315 | function readObject(pro, obj, upperObj, bindIndex) {
316 | for (var p in obj) {
317 | if (getJsonType(obj[p]) === 'array') {
318 | var syntaxMatch = p.match(arrQuanReg);
319 | var proStr = '';
320 | if (syntaxMatch !== null) {
321 | proStr = syntaxMatch[1];
322 | }
323 | else {
324 | proStr = p;
325 | }
326 | upperObj[proStr] = [];
327 | readArray(p, obj[p], upperObj[proStr]);
328 | }
329 | else if (getJsonType(obj[p]) === 'object') {
330 | upperObj[p] = {};
331 | readObject(p, obj[p], upperObj[p]);
332 | }
333 | else {
334 | parseCharactor(p, obj[p], upperObj, bindIndex);
335 | }
336 | }
337 | }
338 | // read array
339 | function readArray(key, arr, upperObj) {
340 | var syntaxMatch = key.match(arrQuanReg);
341 | var leftArr;
342 | if (syntaxMatch !== null) {
343 | arr = randomArray(arr, syntaxMatch[2], syntaxMatch[3], syntaxMatch[4]);
344 | }
345 | arr.forEach(function (item, index) {
346 | if (getJsonType(item) === 'object') {
347 | upperObj[index] = {};
348 | readObject(index, item, upperObj[index], index + 1);
349 | }
350 | else if (getJsonType(item) === 'array') {
351 | readArray(index, item, upperObj[index]);
352 | }
353 | else {
354 | parseCharactor(index, item, upperObj, index + 1);
355 | }
356 | });
357 | }
358 | // parse charactors
359 | function parseCharactor(keyCha, valueCha, upperObj, bindIndex) {
360 | if (getJsonType(valueCha) === 'null' || getJsonType(valueCha) === 'number' || getJsonType(valueCha) === 'boolean') {
361 | upperObj[keyCha] = valueCha;
362 | return;
363 | }
364 | // var syntaxMatch = valueCha.match(syntaxSignReg);
365 | var syntaxExec = syntaxSignReg.exec(valueCha);
366 | var copyValue = valueCha;
367 | var synTxt = '';
368 | var isSyn = false;
369 | while (syntaxExec) {
370 | isSyn = true;
371 | synTxt = syntaxExec[1];
372 | if (RegExp.rightContext === '' && RegExp.leftContext === '') {
373 | copyValue = handleTxt(synTxt, bindIndex);
374 | }
375 | else {
376 | copyValue = copyValue.replace(syntaxExec[0], handleTxt(synTxt, bindIndex));
377 | }
378 | syntaxExec = syntaxSignReg.exec(valueCha);
379 | }
380 | upperObj[keyCha] = copyValue;
381 | if (!isSyn) {
382 | upperObj[keyCha] = valueCha;
383 | }
384 | }
385 | function handleTxt(synTxt, bindIndex) {
386 | var orMatch = synTxt.match(orTxtReg);
387 | if (orMatch !== null) {
388 | console.log(synTxt);
389 | var orArr = synTxt.split('|');
390 | var orArrLen = orArr.length;
391 | var randomIndex = Math.floor(Math.random() * orArrLen);
392 | synTxt = orArr[randomIndex];
393 | }
394 | var keyRes = synTxt.match(keyReg);
395 | var numberRangeRes = synTxt.match(numberRangeReg);
396 | if (keyRes !== null) {
397 | return randomByType(synTxt, keyRes[1], keyRes[2], keyRes[3], keyRes[4], bindIndex);
398 | }
399 | else if (numberRangeRes !== null) {
400 | return numberRange(numberRangeRes[1], numberRangeRes[2], numberRangeRes[3]);
401 | }
402 | else {
403 | return synTxt;
404 | }
405 | }
406 | function randomByType(synTxt, keyType, fNumber, sNumber, tNumber, bindIndex) {
407 | if (keyType === 'number') {
408 | return randomNumber(fNumber, sNumber, tNumber);
409 | }
410 | else if (keyType === 'string') {
411 | return randomString(fNumber, sNumber, tNumber);
412 | }
413 | else if (keyType === 'boolean') {
414 | return randomBoolean();
415 | }
416 | else if (keyType === 'null') {
417 | return randomNull();
418 | }
419 | else if (keyType === 'chinese') {
420 | return randomChinese(fNumber, sNumber, tNumber);
421 | }
422 | else if (keyType === 'index') {
423 | return bindIndex;
424 | }
425 | else if (keyType === 'float') {
426 | return randomFloat(fNumber, tNumber);
427 | }
428 | else if (keyType === 'image') {
429 | return randomImage(fNumber, sNumber, tNumber);
430 | }
431 | else {
432 | return synTxt;
433 | }
434 | }
435 | // get json type
436 | function getJsonType(arg1) {
437 | if (arg1 === null) {
438 | return 'null';
439 | }
440 | else if (typeof arg1 === 'string') {
441 | return 'string';
442 | }
443 | else if (typeof arg1 === 'number') {
444 | return 'number';
445 | }
446 | else if (typeof arg1 === 'boolean') {
447 | return 'boolean';
448 | }
449 | else if (Object.prototype.toString.call(arg1) === '[object Array]') {
450 | return 'array';
451 | }
452 | else if (Object.prototype.toString.call(arg1) === '[object Object]') {
453 | return 'object';
454 | }
455 | else {
456 | throw new Error('illegal type');
457 | }
458 | }
459 |
460 | module.exports = main;
461 |
462 | /***/ })
463 | /******/ ]);
464 | });
--------------------------------------------------------------------------------