#JSON对象模型
com.yashandb.json包中定义了YashanDB当前支持的JSON对象模型类型。
# 章节导航
- Array类型:处理JSON数组。
- Object类型:处理JSON对象。
- 二进制类型:处理YasonBinary。
- 日期类型:处理YasonDate。
- 时间戳类型:处理YasonTimestamp。
- 时间类型:处理YasonTime。
- 数字类型:处理YasonDecimal、YasonByte、YasonShort、YasonInt、YasonLong、YasonFloat和YasonDouble。
- 字符串类型:处理YasonString。
# 使用顺序
开发者通常按以下顺序使用JSON对象模型:
- 使用
YasonFactory或具体类型的构造方法创建YasonValue对象。 - 使用
YasonObject或YasonArray组织对象和数组结构。 - 使用类型对应的读取方法获取Java值,或调用
YasonValue.toString()获取JSON文本。 - 需要写入数据库时,通过
PreparedStatement.setObject绑定对象;需要读取数据库JSON列时,通过ResultSet.getObject获取对象。
各类型的构造方法和读取方法请参考上方章节导航中的具体类型文档。
# 类型对应关系
| YasonType | code | JSON类型对象模型 | 含义 |
|---|---|---|---|
| YASON_OBJECT | 1 | YasonObject | json标准类型,表示json的Object类型。 |
| YASON_ARRAY | 2 | YasonArray | json标准类型,表示json的Array类型。 |
| YASON_STRING | 3 | YasonString | json标准类型,表示json的字符串类型。 |
| YASON_NUMBER | 4 | YasonDecimal | json标准类型,表示json的数字类型。 |
| YASON_BOOLEAN | 5 | YasonBoolean | json标准类型,表示json的布尔类型。 |
| YASON_NULL | 6 | YasonNull | json标准类型,表示json的null类型。 |
| YASON_BYTE | 7 | YasonByte | json扩展类型,是对json的数字类型的细分,对应-128~127范围内的整数类型。 |
| YASON_SHORT | 8 | YasonShort | json扩展类型,是对json的数字类型的细分,对应java的short类型。 |
| YASON_INT | 9 | YasonInt | json扩展类型,是对json的数字类型的细分,对应java的int类型。 |
| YASON_BIGINT | 10 | YasonLong | json扩展类型,是对json的数字类型的细分,对应java的long类型。 |
| YASON_FLOAT | 11 | YasonFloat | json扩展类型,是对json的数字类型的细分,对应java的float类型。 |
| YASON_DOUBLE | 12 | YasonDouble | json扩展类型,是对json的数字类型的细分,对应java的double类型。 |
| YASON_BINARY | 13 | YasonBinary | json扩展类型,表示二进制类型,对应java里面的byte数组。 |
| YASON_TIMESTAMP | 14 | YasonTimestamp | json扩展类型,对应java里面的Timestamp类型。 |
| YASON_DATE | 15 | YasonDate | json扩展类型,对应java里面的Date类型。 |
| YASON_TIME | 16 | YasonTime | json扩展类型,对应java里面的Time类型。 |
注意:其中3~16的这些类型都为非标量类型,创建后它所包含的值就不可修改。
上面16种对象模型都继承自YasonValue父级接口,YasonValue包含如下方法:
| 返回类型 | 方法 | 备注 |
|---|---|---|
| YasonType | getType() | 获取json类型。 |
| int | getDepth() throws SQLException | 获取json深度,深度超过100会抛出异常。 |
| Object | getValue() | 获取json内部实际的值。 |
| String | getString() | 获取json的值的字符串形式。 |
| byte[] | getBinaryData() throws SQLException | 获取json编码成的二进制数据。 |
| String | toString() | 获取json格式的字符串。 |
# 对象模型使用示例
下面示例创建一个JSON对象,向其中加入字符串、数字和数组值,并使用YasonGenerator生成JSON文本。该示例只操作驱动对象模型,不连接数据库。
import com.yashandb.json.YasonArray;
import com.yashandb.json.YasonFactory;
import com.yashandb.json.YasonGenerator;
import com.yashandb.json.YasonObject;
import java.io.StringWriter;
public class JsonObjectModelExample {
public static void main(String[] args) {
YasonFactory factory = new YasonFactory();
YasonObject customer = factory.createObject();
customer.put("name", "Alice");
customer.put("score", 95);
YasonArray tags = factory.createArray();
tags.add("jdbc");
tags.add("json");
customer.put("tags", tags);
System.out.println(customer.getString("name"));
System.out.println(customer);
StringWriter writer = new StringWriter();
YasonGenerator generator =
factory.createJsonTextGenerator(writer);
generator.writeStartObject()
.write("name", "Alice")
.write("score", 95)
.writeEnd();
generator.close();
System.out.println(writer);
}
}
正常情况下,程序输出如下:
Alice {"name":"Alice","tags":["jdbc","json"],"score":95} {"name":"Alice","score":95}

