dom-data-bridge
核心功能:解析string格式json数据
安装
// npm
npm install dom-data-bridge // 装载
npm update dom-data-bridge // 更新
// yarn
yarn add dom-data-bridge // 装载
yarn upgrade dom-data-bridge // 更新
// Browserify(https://github.com/songyijian/dom-data-bridge)
<script src="../dist/index.js"></script>
引入
import {
DataDridge,
parseMuster,
superParse,
domDataDridge,
} from 'dom-data-bridge'
domDataDridge
// domDataDridge会过滤: data-dridge 属性的dom ; data-dridge="key" ,把dom内容作为 val
<textarea data-dridge=array id="array" rows="2">
[ '1',2]
</textarea>
let demo = domDataDridge()
// demo === retrun mew DataDridge(creatfilter)
// demo.push() === new DataDridge.push()
// demo.get() === new DataDridge.get()
// creatfilter push 前的回调
function creatfilter({key,val}) {
if (key === ''){
key = 'object'
val = 'data-dridge, key为空被creatfilter过滤处理'
}
return {key, val}
}
DataDridge
整理解析不标准数据,按照规则读取。 更多细节见demo/index
var globalConfig = { // 全局配置
risk: false, // <superParse> 接受风险解析非标准json
filter: a => a // 过滤函数
}
const demo = new DataDridge(globalConfig)
demo.dataMap = {} // 原始数据源
demo.config = globalConfig // 全局排除规则
/**
* @Description: 插入数据
* @param {object|'{}'|key} wkey 【json|‘{}’】会被解析成对象合并到dataMap,【string】生成{[wkey]:val}
* @param {*} val 当wkey=‘{}’时val必填
* @param {*} risk wkey=‘{}’ 是否利用superParse解析
*/
demo.push( wkey, val = '', risk = globalConfig.risk )
// demo.push( '{"a":1}') // yes
// demo.push( 'a', '1',) //yes
// demo.push( '{a:1}', '', true) //yes
// demo.push( {a:1}, '',fasle) //error
// demo.push( '{a:1}', '') // error
// demo.push( '[]', '', true) //error
/**
* @Description: 根据(解析|验证规则)获取数据
* @param {object} schema {filter:function,risk:boolean,type:<parseMuster>,default} 解析|验证规则
* @param {boolean} risk parseMuster规则
* @return {object} schema 验证通过的{}
*/
get(schema, risk = globalConfig.risk)
schema = {
key:{
filter:(a)=>a,
risk:false,
type: "Object|Array|String|Boolean|Number|RegExp", // parseMuster| RegExp正则验证
default:2 // 默认值
}
}
// 数据处理流程
// filter > type( Object|Array ? risk) > default
parseMuster
superParse > parseMuster ,DataDridge 内的解析(验证)规则
let {Object, Array, String, Boolean, Number} = parseMuster;
/**
* @Description: 解析验证数据类型
* @param {Object, Array, String, Boolean, Number} a 要解析的'{字符串}'对象, 不可‘[]’
* @param {boolean} risk 利用eval可以解析一些不规范的{json}
* @throw {Error} 解析+验证 失败
*/
parseMuster[key](a,risk) // Object&Array == <superParse>
// Object {}
parseMuster.Object('{a:1}') // Error
parseMuster.Object('{a:1}',true) // {a:1}
parseMuster.Object('{"a":1}') // {a:1}
parseMuster.Object({a:1},true) // {a:1}
// Array []
parseMuster.Array('{a:1}',true) // Error
parseMuster.Array('[{a:1},2]') // Error
parseMuster.Array('[{a:1},2]',true) // [{…}, 2]
// Number 对NaN做了处理
parseMuster.Number == Number()
parseMuster.Number(NaN) //Error
parseMuster.String === String()
parseMuster.Boolean === Boolean()
superParse
superParse 字符串json解析,可针对非标准的数据字符串开启风险解析,
/**
* @Description: 支持高风险的json字符串解析
* @param {string} strs 要解析的'{字符串}'对象, 不可‘[]’
* @param {boolean} risk 利用eval可以解析一些不规范的{json}
* @return {object}
*/
superParse(string,risk)
// string : '{}' | '[]'
// risk :true = 可以解析一些不规范的{json} 但是存在风险,谨慎使用
superParse('{a:1}') // Error
superParse('{"a":1}') // {a:1}
superParse('{a:1}',true) // {a:1}
superParse('[{a:1},2]') // Error
superParse('[{a:1},2]',true) // [{…}, 2]