uniapp 根据json文件获对象名与值传入后台,并通过后台返回的字段拼接新的joson文件并下载。

 

        uniapp要通过json文件做多语言翻译,后台表示可以通过后台给我配置出我需要的翻译,我本地配置了四个语言文件,现在需要把这四个文件以下面这种格式传给后台

line:[
    {
        index: 	'key.keys.key',//json翻译的key值,这边分了三级
	    chinese: '你好', //json翻译文件的中文值
	    english: 'Hello', //英语
		spanish: 'Hola',  //西语
		catalunya:  'Hola', //加泰罗尼亚语
    }
   
]

 我的json文件是这样的

//中文zh.josn文件
{
    key:{
        keys:{
            key:'你好'
        }
    }
}

//西班牙语的es.json 文件
{
    key:{
        keys:{
            key:'Hello'
        }
    }
}

//英语的en.json文件
{
    key:{
        keys:{
            key:'Hola'
        }
    }
}

//加语的ca.json文件
{
    key:{
        keys:{
            key:'Hola'
        }
    }
}

我要做的是拆分我的json文件,下面是我的方法,大家有更好的方法可以使用自己的。

<script>
	import zhjson from '@/i18n/zh.json'
	import esjson from '@/i18n/es.json'
	import enjson from '@/i18n/en.json'
	import cajson from '@/i18n/ca.json'
	export default {
		data() {
			return {
				url: 'xxx.xxx'//后台地址
			}
		},
		methods: {
			// 上传本地数据
			updata(){
				let _this = this;
				let line = [];
				let keys = Object.keys(zhjson);
                //这里获取了对象名开始循环
				keys.forEach(item =>{
					if(typeof zhjson[item] == 'string'){
						let arr = {
							index: 	item,
							chinese	: zhjson[item],
							english: enjson[item],
							spanish: esjson[item],
							catalunya: cajson[item],
						}
						line.push(arr)
					}else if(typeof zhjson[item] == 'object'){
						let keystwo = Object.keys(zhjson[item]);
						keystwo.forEach(items =>{
							if(typeof zhjson[item][items] == 'string'){
								let arr = {
									index: 	item+ '.' + items,
									chinese	: zhjson[item][items],
									english: enjson[item][items],
									spanish: esjson[item][items],
									catalunya: esjson[item][items],
								}
								line.push(arr)
							}else if(typeof zhjson[item][items] == 'object'){
								let keythree = Object.keys(zhjson[item][items]);
								keythree.forEach(itemthree =>{
									if(typeof zhjson[item][items][itemthree] == 'string'){
										let arr = {
											index: 	item+ '.' + items+ '.' + itemthree,
											chinese	: zhjson[item][items][itemthree],
											english: enjson[item][items][itemthree],
											spanish: esjson[item][items][itemthree],
											catalunya: esjson[item][items][itemthree],
										}
										line.push(arr)
									}else {
										return
									}
								})
							}
						})
					}
				})
				console.log('line',line)
				// 这里是我上传到后台的接口
				this._post('uniapp/batch_upload',{
					program: '项目名', 
					client: '项目分类',
					line: line,
				},result => {
					
				})
			},
			// 生成本地json文件
			dataGenerate(){
				let _this = this;
				let line = [];
				console.log('jiekou')
				_this._post('uniapp/batch_download',{
					program: '项目名', 
					client: '项目分类',
					line: line,
				},result => {
                    //将拿到的数据进行拆分,组合成新的json文件
					_this.Generatejosn(result.data.line)
					
				})
			},
			// 生成json文件
			Generatejosn(data){
				var zhjsonlist = {},
					enjsonlist = {},
					esjsonlist = {},
					cajsonlist = {};
				data.forEach(item => {
					let strArr = item.index.split('.')
					if(strArr.length == 1){
						this.$set(zhjsonlist, strArr[0], item.chinese);
						this.$set(enjsonlist, strArr[0], item.english);
						this.$set(esjsonlist, strArr[0], item.spanish);
						this.$set(cajsonlist, strArr[0], item.catalunya);
					}else if(strArr.length == 2){
						if(zhjsonlist.hasOwnProperty(strArr[0])){
							this.$set(zhjsonlist[strArr[0]], strArr[1], item.chinese);
							this.$set(enjsonlist[strArr[0]], strArr[1], item.english);
							this.$set(esjsonlist[strArr[0]], strArr[1], item.spanish);
							this.$set(cajsonlist[strArr[0]], strArr[1], item.catalunya);
						}else{
							this.$set(zhjsonlist, strArr[0], {});
							this.$set(enjsonlist, strArr[0], {});
							this.$set(esjsonlist, strArr[0], {});
							this.$set(cajsonlist, strArr[0], {});
							this.$set(zhjsonlist[strArr[0]], strArr[1], item.chinese);
							this.$set(enjsonlist[strArr[0]], strArr[1], item.english);
							this.$set(esjsonlist[strArr[0]], strArr[1], item.spanish);
							this.$set(cajsonlist[strArr[0]], strArr[1], item.catalunya);
						}
						
					}else if(strArr.length == 3){
						if(zhjsonlist.hasOwnProperty(strArr[0])){
							if(zhjsonlist[strArr[0]].hasOwnProperty(strArr[1])){
								this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
								this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
								this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
								this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
							}else{
								this.$set(zhjsonlist[strArr[0]], strArr[1], {});
								this.$set(enjsonlist[strArr[0]], strArr[1], {});
								this.$set(esjsonlist[strArr[0]], strArr[1], {});
								this.$set(cajsonlist[strArr[0]], strArr[1], {});
								this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
								this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
								this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
								this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
							}
						}else{
							this.$set(zhjsonlist, strArr[0], {});
							this.$set(enjsonlist, strArr[0], {});
							this.$set(esjsonlist, strArr[0], {});
							this.$set(cajsonlist, strArr[0], {});
							this.$set(zhjsonlist[strArr[0]], strArr[1], {});
							this.$set(enjsonlist[strArr[0]], strArr[1], {});
							this.$set(esjsonlist[strArr[0]], strArr[1], {});
							this.$set(cajsonlist[strArr[0]], strArr[1], {});
							this.$set(zhjsonlist[strArr[0]][strArr[1]], strArr[2], item.chinese);
							this.$set(enjsonlist[strArr[0]][strArr[1]], strArr[2], item.english);
							this.$set(esjsonlist[strArr[0]][strArr[1]], strArr[2], item.spanish);
							this.$set(cajsonlist[strArr[0]][strArr[1]], strArr[2], item.catalunya);
						}
						
					}
				})
                //因为我要生成四个json文件,同时生成会导致只能生成一个,具体原因可能是销毁那部分的原因我也没研究,直接做了处理,让文件一个个生成
				let down = (i) =>{
					if(i == 0){
						var js = JSON.stringify(zhjsonlist);
					}else if (i == 1){
						var js = JSON.stringify(enjsonlist);
					}else if (i == 2){
						var js = JSON.stringify(esjsonlist);
					}else if (i == 3){
						var js = JSON.stringify(cajsonlist);
					}
					//创建一个文本blob对象
					var  blob = new Blob([js],{type:'application/json'})
					//构造下载连接
					const url = URL.createObjectURL(blob)
					//创建下载连接的A标签
					const a = document.createElement('a')
					a.href = url
					if(i == 0){
						a.download  = 'zh.json'
					}else if (i == 1){
						a.download  = 'en.json'
					}else if (i == 2){
						a.download  = 'es.json'
					}else if (i == 3){
						a.download  = 'ca.json'
					}
					//模拟点击下载连接
					document.body.appendChild(a)
					a.click()
					document.body.removeChild(a)
					//释放资源
					URL.revokeObjectURL(url)
					if(i == 0){
						down(1)
					}else if(i == 1){
						down(2)
					}else if(i == 2){
						down(2)
					}else if(i == 2){
						return;
					}
				}
				down(0)      
			},
			_get( url,data, resolve, fail, complete){
				let _this = this;
				uni.request({
					url: _this.url +  url,
					header: {
						'content-type': 'application/json'
					},
					data: data,
					success(res) {
						resolve(res.data)
					},
					fail(res) {
						
					},
					complete(res) {
						
					}
				});
			},
			_post(url,data, success, fail, complete){
				let _this = this;
				uni.request({
					url: _this.url +  url,
					header: {
						'content-type': 'application/json'
					},
					method: 'POST',
					data: data,
					success(res) {
						success(res.data)
					},
					fail(res) {
						
					},
					complete(res) {
						
					}
				});
			},
		}
	}
</script>

拆分组合上传,下载组合生成,这个逻辑。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值