前段时间在写学习uniappX过程中发现一个问题,就把对象用StorageSync存储到本地后再取出来,无法转换成原来的自定义类型。于是翻了一下文档,发现JSON.parse() 方法可以解决这个问题。
这是官方文档对于JSON.parse()的解释
parse
JSON.parse() 方法用来解析 JSON 字符串,构造由字符串描述的对象。可能返回值是: UTSJSONObject/Array/number/boolean/string 等基本数据类型
const json = `{"result":true, "count":42}`;
const obj = JSON.parse(json);
console.log(obj["count"]);
// expected output: 42
console.log(obj["result"]);
// expected output: true
注意
- JSON.parse 解析出来的对象,目前仅支持使用方括号[]访问
- 如果输入的字符串不是合法的json格式,则会返回 null
- JSON.parse 接口内部通过特殊方式读取了范型类型,不支持传入动态的范型:比如将外层方法的普通范型参数传入 JSON.parse
通过阅读官方文档我们发现只要将对象转换成字符串,然后再用JSON.parse()方法,便可以转换成对象,并且JSON.parse()是可以直接绑定泛型的,以下我我实现的代码
<template>
<view class="content">
</view>
</template>
<script>
type Userinfo = {
name : string,
age : number,
sex : number
}
export default {
data() {
return {
}
},
onLoad() {
let userinfo : Userinfo = {
name: '张三',
age: 20,
sex: 1
}
uni.setStorageSync('Userinfo', userinfo)
let data = JSON.parse<Userinfo>(JSON.stringify(uni.getStorageSync('Userinfo')))
console.log("是否为Userinfo类型", data instanceof Userinfo);
},
methods: {
}
}
</script>
<style scoped>
</style>