yapi/client/parseCommon.js

114 lines
2.4 KiB
JavaScript
Raw Normal View History

function regexp_parse(p, c) {//遍历json中的regexp字符串并将其转为RegExp对象。其中p为被转换的jsonc为存储对象。 "kry|regexp/i|":"<(.*)>(.*)<\/(.*)>|<(.*)\/>"
c = c || {};
for (var i in p) {
if (!p.hasOwnProperty(i)) {
continue;
}
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
regexp_parse(p[i], c[i]);
} else {
if (/^\w+\s*\|\s*(regexp){1}\s*(\/\s*[img])?/.test(i)) {
var regexpStr = i.split("|");
var regex = regexpStr[1].split("/");
if (regex[0]) {
try {
if (regex[1]) {
c[i.replace(/\|regexp\s*(\/[img]*)?\s*/, "")] = new RegExp(p[i], regex[1]);
} else {
c[i.replace(/\|regexp\s*(\/[img]*)?\s*/, "")] = new RegExp(p[i]);
}
}
catch (e) {
c[i] = p[i];
}
}
} else {
c[i] = p[i];
}
}
}
return c;
}
function mockToDocModel(mock,doc,key) {
doc = doc || [];
key = key || [];
for (var i in mock) {
if (!mock.hasOwnProperty(i)) {
continue;
}
var index = i;
if(/^\w+(\|\w+)?/.test(i)){
index = i.split("|")[0];
}
if (typeof mock[i] === 'object') {
if (mock[i].constructor === Array) {
//为数组时
if(mock.constructor != Array){
if(key.length){
key.push("."+ index + "[]");
}else{
key.push(index + "[]");
}
}else{
key.push("[]");
}
doc.push(key.join(""));
} else {
// 为object时
if(mock.constructor != Array){
if(key.length){
key.push('.'+index);
}else{
key.push(index);
}
doc.push(key.join());
}
}
mockToDocModel(mock[i],doc,key);
key.pop();
} else {
if(mock.constructor != Array){
if(key.length){
doc.push(key.join("")+"."+index);
}else{
doc.push(index);
}
}
}
}
return doc;
}
mockToDocModel({
"errcode": "@integer",
"data|9-19": [
"123",
{
"name": "@name",
"name1": [{
"name3":"1"
}]
}],
"data4": [1,2],
"data1": "123",
"data3": {
"err": "errCode",
"arr": [1,2]
}
})
module.exports = {
mockToDocModel: mockToDocModel,
regexp_parse: regexp_parse
};