提交 bc69f415 编写于 作者: B baiy 提交者: ninecents

添加序列化转换功能句

上级 0cf9a73a
{
"name": "c-tool",
"version": "1.3.1",
"version": "1.4.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "c-tool",
"version": "1.3.1",
"version": "1.4.1",
"dependencies": {
"ajax-request": "^1.2.3",
"babel-runtime": "^6.26.0",
......@@ -20,11 +20,14 @@
"ipinyinjs": "^1.0.0",
"is-url": "^1.2.4",
"js-base64": "^2.6.4",
"js-yaml": "^3.14.1",
"json-to-properties": "^1.1.3",
"jsonlint": "^1.6.3",
"lscache": "^1.3.0",
"moment": "^2.29.1",
"php-array-reader": "^1.2.0",
"phparr": "^0.2.0",
"properties-to-json": "^0.1.7",
"qrcode": "^1.4.4",
"qrcode-parser": "^1.2.0",
"query-string": "^6.13.7",
......@@ -35,7 +38,9 @@
"view-design": "^4.3.2",
"vue": "^2.6.12",
"vue-codemirror": "^4.0.6",
"vue-router": "^3.4.3"
"vue-router": "^3.4.3",
"x2js": "github:abdolence/x2js",
"xml-formatter": "^2.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.12.1",
......@@ -2309,7 +2314,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
......@@ -5622,7 +5626,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
......@@ -6677,6 +6680,11 @@
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
"node_modules/graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
},
"node_modules/gzip-size": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
......@@ -8022,7 +8030,6 @@
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
......@@ -8084,6 +8091,28 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"node_modules/json-to-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/json-to-properties/-/json-to-properties-1.1.3.tgz",
"integrity": "sha1-jRemOmio26erEDoCdjKzmsMsM/E=",
"dependencies": {
"commander": "2.9.0"
},
"bin": {
"json-to-properties": "src/index.js"
}
},
"node_modules/json-to-properties/node_modules/commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"dependencies": {
"graceful-readlink": ">= 1.0.0"
},
"engines": {
"node": ">= 0.6.x"
}
},
"node_modules/json3": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
......@@ -10838,6 +10867,11 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"node_modules/properties-to-json": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/properties-to-json/-/properties-to-json-0.1.7.tgz",
"integrity": "sha512-zIq+KEciImrJrI9ZV/p4t7d2f1j/yUATZguWeGH2SUhd0PF/56dPitc5zaSYI4f0Pghp3L9JniMAED8AG/ztcQ=="
},
"node_modules/proxy-addr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
......@@ -12479,8 +12513,7 @@
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"node_modules/sshpk": {
"version": "1.16.1",
......@@ -14882,6 +14915,30 @@
"async-limiter": "~1.0.0"
}
},
"node_modules/x2js": {
"version": "1.2.0",
"resolved": "git+ssh://git@github.com/abdolence/x2js.git#185e410b3fa621070fea1f86a389b477afa216b9",
"license": "Apache Licence v2"
},
"node_modules/xml-formatter": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.4.0.tgz",
"integrity": "sha512-xTQ2IfbkCQKn0DGN5SD5KUgTgVohWiolyOXTLUHKJczIuSeGonN0BPduB9VQR5HOEuT1KOHQsOHSmTpU76zpUA==",
"dependencies": {
"xml-parser-xo": "^3.1.1"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/xml-parser-xo": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.1.1.tgz",
"integrity": "sha512-gq1nDlJxjKQpPPZUhLbJ52pghtlB4Rz6LAQULm3SF6xzOYVnUloBglNhJR9vtZB3vIxMN/R3nZTf3qmun+6GCg==",
"engines": {
"node": ">= 10"
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
......@@ -17040,7 +17097,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
......@@ -19771,8 +19827,7 @@
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"esquery": {
"version": "1.3.1",
......@@ -20625,6 +20680,11 @@
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
},
"gzip-size": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
......@@ -21660,7 +21720,6 @@
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
......@@ -21713,6 +21772,24 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"json-to-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/json-to-properties/-/json-to-properties-1.1.3.tgz",
"integrity": "sha1-jRemOmio26erEDoCdjKzmsMsM/E=",
"requires": {
"commander": "2.9.0"
},
"dependencies": {
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"requires": {
"graceful-readlink": ">= 1.0.0"
}
}
}
},
"json3": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
......@@ -24008,6 +24085,11 @@
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"properties-to-json": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/properties-to-json/-/properties-to-json-0.1.7.tgz",
"integrity": "sha512-zIq+KEciImrJrI9ZV/p4t7d2f1j/yUATZguWeGH2SUhd0PF/56dPitc5zaSYI4f0Pghp3L9JniMAED8AG/ztcQ=="
},
"proxy-addr": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
......@@ -25400,8 +25482,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
"version": "1.16.1",
......@@ -27347,6 +27428,23 @@
"async-limiter": "~1.0.0"
}
},
"x2js": {
"version": "git+ssh://git@github.com/abdolence/x2js.git#185e410b3fa621070fea1f86a389b477afa216b9",
"from": "x2js@github:abdolence/x2js"
},
"xml-formatter": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.4.0.tgz",
"integrity": "sha512-xTQ2IfbkCQKn0DGN5SD5KUgTgVohWiolyOXTLUHKJczIuSeGonN0BPduB9VQR5HOEuT1KOHQsOHSmTpU76zpUA==",
"requires": {
"xml-parser-xo": "^3.1.1"
}
},
"xml-parser-xo": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.1.1.tgz",
"integrity": "sha512-gq1nDlJxjKQpPPZUhLbJ52pghtlB4Rz6LAQULm3SF6xzOYVnUloBglNhJR9vtZB3vIxMN/R3nZTf3qmun+6GCg=="
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
{
"name": "c-tool",
"version": "1.3.1",
"version": "1.4.1",
"private": true,
"scripts": {
"serve": "vue-cli-service serve --port 8081",
......@@ -20,11 +20,14 @@
"ipinyinjs": "^1.0.0",
"is-url": "^1.2.4",
"js-base64": "^2.6.4",
"js-yaml": "^3.14.1",
"json-to-properties": "^1.1.3",
"jsonlint": "^1.6.3",
"lscache": "^1.3.0",
"moment": "^2.29.1",
"php-array-reader": "^1.2.0",
"phparr": "^0.2.0",
"properties-to-json": "^0.1.7",
"qrcode": "^1.4.4",
"qrcode-parser": "^1.2.0",
"query-string": "^6.13.7",
......@@ -35,7 +38,9 @@
"view-design": "^4.3.2",
"vue": "^2.6.12",
"vue-codemirror": "^4.0.6",
"vue-router": "^3.4.3"
"vue-router": "^3.4.3",
"x2js": "github:abdolence/x2js",
"xml-formatter": "^2.4.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.12.1",
......
......@@ -35,8 +35,8 @@ const routes = [
component: r => require(['./views/tool/ip.vue'], r)
},
{
path: '/tool/phpArraySerialize',
component: r => require(['./views/tool/phpArraySerialize.vue'], r)
path: '/tool/serializeConversion',
component: r => require(['./views/tool/serializeConversion.vue'], r)
},
{
path: '/tool/pinyin',
......
import { env, inArray } from '../helper'
import {env, inArray} from '../helper'
import cache from './cache'
// 工具缓存数据过期时间(秒)
......@@ -17,38 +17,34 @@ export const DEFAULT_COMMON_TOOL = [
]
const category = [
{ 'name': 'common', 'title': '常用工具' },
{ 'name': 'encryption', 'title': '加密解密' },
{ 'name': 'conversion', 'title': '编码转换' },
{ 'name': 'json', 'title': 'JSON' },
{ 'name': 'other', 'title': '其他工具' },
{'name': 'common', 'title': '常用工具'},
{'name': 'encryption', 'title': '加密解密'},
{'name': 'conversion', 'title': '编码转换'},
{'name': 'serialize', 'title': '序列化'},
{'name': 'other', 'title': '其他工具'},
]
const tool = [
{ 'name': 'hash', 'title': '哈希(hash)', 'cat': ['encryption'] },
{ 'name': 'encrypt', 'title': '加密/解密', 'cat': ['encryption'] },
{ 'name': 'base64', 'title': 'BASE64编码', 'cat': ['encryption'] },
{ 'name': 'json', 'title': 'JSON工具', 'cat': ['conversion', 'json'] },
{ 'name': 'url', 'title': 'URL编码', 'cat': ['conversion'] },
{ 'name': 'timestamp', 'title': '时间戳', 'cat': ['conversion'] },
{ 'name': 'qrCode', 'title': '二维码', 'cat': ['other'] },
{ 'name': 'pinyin', 'title': '汉字转拼音', 'cat': ['conversion'] },
{ 'name': 'ip', 'title': 'IP地址查询', 'cat': ['other'] },
{ 'name': 'code', 'title': '代码格式化', 'cat': ['other'] },
{ 'name': 'unicode', 'title': 'Unicode', 'cat': ['conversion'] },
{ 'name': 'decimalConvert', 'title': '进制转换', 'cat': ['conversion'] },
{ 'name': 'regex', 'title': '正则表达式', 'cat': ['other'] },
{ 'name': 'randomString', 'title': '随机字符生成', 'cat': ['other'] },
{
'name': 'phpArraySerialize',
'title': 'PHP数组/序列化',
'cat': ['conversion', 'json'],
},
{ 'name': 'diffs', 'title': '文本差异化对比', 'cat': ['other'] },
{ 'name': 'crontab', 'title': 'crontab校验', 'cat': ['other'] },
{ 'name': 'websocket', 'title': 'websocket调试', 'cat': ['other'] },
{ 'name': 'unit', 'title': '单位换算', 'cat': ['other'] },
{ 'name': 'time', 'title': '时间计算器', 'cat': ['other'] },
{'name': 'hash', 'title': '哈希(hash)', 'cat': ['encryption']},
{'name': 'encrypt', 'title': '加密/解密', 'cat': ['encryption']},
{'name': 'base64', 'title': 'BASE64编码', 'cat': ['encryption']},
{'name': 'json', 'title': 'JSON工具', 'cat': ['conversion', 'serialize']},
{'name': 'url', 'title': 'URL编码', 'cat': ['conversion']},
{'name': 'timestamp', 'title': '时间戳', 'cat': ['conversion']},
{'name': 'qrCode', 'title': '二维码', 'cat': ['other']},
{'name': 'pinyin', 'title': '汉字转拼音', 'cat': ['conversion']},
{'name': 'ip', 'title': 'IP地址查询', 'cat': ['other']},
{'name': 'code', 'title': '代码格式化', 'cat': ['other']},
{'name': 'unicode', 'title': 'Unicode', 'cat': ['conversion']},
{'name': 'decimalConvert', 'title': '进制转换', 'cat': ['conversion']},
{'name': 'regex', 'title': '正则表达式', 'cat': ['other']},
{'name': 'randomString', 'title': '随机字符生成', 'cat': ['other']},
{'name': 'serializeConversion', 'title': '序列化转换', 'cat': ['conversion', 'serialize']},
{'name': 'diffs', 'title': '文本差异化对比', 'cat': ['other']},
{'name': 'crontab', 'title': 'crontab校验', 'cat': ['other']},
{'name': 'websocket', 'title': 'websocket调试', 'cat': ['other']},
{'name': 'unit', 'title': '单位换算', 'cat': ['other']},
{'name': 'time', 'title': '时间计算器', 'cat': ['other']},
]
// 徽章是否显示
......@@ -83,7 +79,7 @@ const getSetting = function (name, defaultValue = null) {
const saveSetting = function (name, value) {
let setting = cache.getNoVersion('setting', {})
setting[name] = value
cache.setNoVersion('setting',setting);
cache.setNoVersion('setting', setting);
}
export default {
......@@ -94,7 +90,7 @@ export default {
setUserCommon,
getToolTitle,
getUserCommon,
getToolByCategory (cat) {
getToolByCategory(cat) {
return tool.filter((t) => {
if (cat === 'common') {
return inArray(t.name, getUserCommon())
......@@ -102,10 +98,10 @@ export default {
return inArray(cat, t.cat)
})
},
badgeToolIsShow (tool) {
badgeToolIsShow(tool) {
return badgeIsShow() && inArray(tool, BADGE_TOOL)
},
badgeCategoryIsShow (cat) {
badgeCategoryIsShow(cat) {
return badgeIsShow() && inArray(cat, BADGE_CATEGORY)
},
}
\ No newline at end of file
import jsonToPhpArray from "phparr"
import phpArrayToJson from "php-array-reader"
import phpSerialize from "serialize-php"
import propertiesToJSON from "properties-to-json"
import jsonToPropertiesParser from "json-to-properties/src/scripts/parser"
import yaml from "js-yaml"
import xmlFormatter from "xml-formatter"
import X2JS from "x2js"
export const TYPE = ["json", "xml", "yaml", "phpArray", "phpSerialize", "properties"];
class serializeConversion {
constructor(input, source) {
if (!TYPE.includes(source)) {
throw new Error("source error");
}
try {
switch (source) {
case "json":
this.input = JSON.parse(input);
break;
case "xml":
this.input = (new X2JS()).xml_str2json(input);
if(Object.keys(this.input).length === 1 && Object.keys(this.input).includes('default_root')){
this.input = this.input['default_root'];
}
break
case "yaml":
this.input = yaml.load(input);
break;
case "phpArray":
this.input = phpArrayToJson.fromString(input);
break;
case "phpSerialize":
this.input = phpSerialize.unserialize(input);
break;
case "properties":
console.log(propertiesToJSON(input))
this.input = propertiesToJSON(input);
break;
}
} catch (e) {
throw new Error("源数据转换异常:" + e.message);
}
}
getByTarget(target) {
if (!TYPE.includes(target)) {
throw new Error('target error');
}
try {
switch (target) {
case "json":
return this.getJson();
case "xml":
return this.getXml();
case "yaml":
return this.getYaml();
case "phpArray":
return this.getPhpArray();
case "phpSerialize":
return this.getPhpSerialize();
case "properties":
return this.getProperties();
}
} catch (e) {
throw new Error("目标数据转换错误:" + e.message);
}
}
getJson() {
return JSON.stringify(this.input,null,4)
}
getXml() {
let x2js = new X2JS();
this.input = Object.keys(this.input).length > 1 ? {default_root:this.input} : this.input;
return xmlFormatter(x2js.json2xml_str(this.input), {
indentation: ' ',
collapseContent: true,
lineSeparator: '\n'
});
}
getYaml() {
return yaml.dump(this.input)
}
getProperties() {
return jsonToPropertiesParser.deflate(this.input).join("\n")
}
getPhpArray() {
return jsonToPhpArray(this.input);
}
getPhpSerialize() {
return phpSerialize.serialize(this.input);
}
}
export const conversion = (data, source) => {
return new serializeConversion(data, source)
}
\ No newline at end of file
<template>
<div>
<Input v-model="current.input" :rows="7" type="textarea" placeholder="内容"></Input>
<option-block>
<FormItem>
<Select v-model="current.source" style="width:200px">
<Option v-for="v in type" :value="v" :key="v">源数据:{{ v }}</Option>
</Select>
</FormItem>
<FormItem>
<Select v-model="current.target" style="width:200px">
<Option v-for="v in type" :value="v" :key="v">目标数据:{{ v }}</Option>
</Select>
</FormItem>
<FormItem>
<ButtonGroup>
<Button type="primary" @click="handle()">转换</Button>
</ButtonGroup>
</FormItem>
</option-block>
<Input v-model="current.output" :rows="7" type="textarea" placeholder="结果"></Input>
</div>
</template>
<script>
import {TYPE as conversionType,conversion} from "./library/serializeConversion"
export default {
created() {
this.current = Object.assign(this.current, this.$getToolData("input"))
},
methods: {
handle() {
if (this.current.input) {
try {
this.current.output = conversion(this.current.input,this.current.source).getByTarget(this.current.target);
} catch (e) {
this.$Message.error(e.message);
return;
}
this.$clipboardCopy(this.current.output);
this.$saveToolData(this.current);
}
}
},
data() {
return {
current: {
input: "",
output: "",
source: "json",
target: "xml"
},
type: conversionType,
}
},
}
</script>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册