json.md 2.0 KB
Newer Older
D
DCloud_LXH 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
## JSON

### 静态方法

### parse

JSON.parse() 方法用来解析 JSON 字符串,构造由字符串描述的 UTSJSONObject。

```ts
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

杜庆泉's avatar
杜庆泉 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
### <T> parse

带泛型的 JSON.parse<T>()  是JSON.parse() 的加强版实现,它可以返回一个指定类型的结构化数据,在很多场景下它非常有用。

先看看他的用法

 ```uts

class Persion {
    var name =""
    var age = 0
}

// 带泛型的parse,这里的personObj 类型是 我们定义的`Persion`类
let personObj = JSON.parse<Persion>('{"name":"zhangsan","age":12}')
// 不带泛型的parse,这里的jsonObj类型是通用的`UTSJSONObject`
let jsonObj = JSON.parse('{"name":"zhangsan","age":12}')
 ```

与不带泛型的JSON.parse 相比,多了一个`<Persion>` 尖括号 用来指定返回类型。

在这个示例中,看上去好像也不是很有用。太简单了。我们可以扩展一下

```
let userArrayArray = JSON.parse<Array<Persion>>('[{"name":"zhangsan","age":12},{"name":"lisi","age":13}]')
```
 
我们得到了一个Person数组,甚至我们还可以把Person 扩展到几百条属性,或者在其中嵌套更多层数据结构,

杜庆泉's avatar
杜庆泉 已提交
54
总结:带泛型的 `parse`函数,会提高我们反序列数据的开发效率,明确的结构数据可以提升工程健壮度,推荐使用
杜庆泉's avatar
杜庆泉 已提交
55 56 57



D
DCloud_LXH 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
### stringify

JSON.stringify() 方法将一个 uts 对象或值转换为 JSON 字符串

```ts
console.log(JSON.stringify({ x: 5, y: 6 }));
// expected output: "{"x":5,"y":6}"

console.log(JSON.stringify([3, 'false', boolean]));
// expected output: "[3,"false",false]"

console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
// expected output: ""2006-01-02T15:04:05.000Z""

```