# aardio 范例: JSON 库 -  特殊数据类型

```aardio
//JSON 库 -  特殊数据类型
import console;
import JSON;

//定义 JSON
var json = "{ items = [] }";

//转换为对象，items 解析为 纯数组。
var object = JSON.parse(json);

//添加数组字段
object.items2 = []; //空数组
object.items3 = [1,2,3]; //纯数组。
object.items4 = {1,2,3}; //包含数组成员的表对象转换为 JSON 数组

//转换为 JSON
var json = JSON.stringify(object);
console.log(json)

//JSON.stringifyArray 总是将参数视为数组处理。
var json = JSON.stringifyArray({});
console.log(json)
 
/*
在 aardio 中 null 是一个不存在的值。
例如 { name = null } 等价于空表 {} 。

而在 JSON 中我们有时候需要保存 null 值。
aardio 通过在元表的 _defined 字段中指定必须保存 null 值的字段名。
可以调用 table.define() 定义需要保留 null 值的键名（可以重复调用以添加键名）。
JSON 或 table.eachName 支持 _defined 元属性。
*/
 
//定义 JSON
var json = "{name:null,age:22}";

//解析为对象
var object = JSON.parse(json);

//生成 JSON 
var json = JSON.stringify(object);

console.log(json);

/*
时间对象与 JS 语言相同转换为 ISO8601 格式字符串。
time 对象与 JS 一样只负责字符串化,不负责在解析 JSON 时自动还原。
应使用 time.iso8601 函数解析 iso8601 格式的时间。
*/

//定义对象
var object = { time = time() };

//生成 JSON 
var json = JSON.stringify(object);

//解析为对象
var object = JSON.parse(json);

var tm = time.iso8601(object.time);
console.log( tostring(tm,"%c")  )


/*
buffer 类型转换为 JSON 时使用了 node.js 中的 Buffer 格式。
示例： {"data":[230,181,139],"type":"Buffer"} 
其中 type 字段指明类型,data 字段为字节数组（ table 类型，纯数组对象 ）。
raw.buffer 支持在参数中传入这种格式的表对象并还原为 aardio 缓冲区（ buffer ）。
*/

//定义 buffer
var buffer = raw.buffer("abc");

//生成 JSON 
var json = JSON.stringify(buffer);

//解析为对象
var bufferObject = JSON.parse(json);

//可以作为参数快速还原为 buffer
var buffer = raw.buffer(bufferObject)
 
console.log(buffer);  
console.pause()
```