package javax.json;
/**
* 目的:定义JSON值的类型(不可变的JSON值)
*
* <p>JSON值有:{@link JsonObject}、{@link JsonArray}
* {@link JsonNumber}、{@link JsonString}
* JsonValue.TRUE、JsonValue.FALSE、JsonValue.NULL
* @author TCM
* @create 2017年11月3日上午10:31:23
*/
public interface JsonValue {
//JSON值的类型
enum ValueType {
ARRAY,
OBJECT,
STRING,
NUMBER,
TRUE,
FALSE,
NULL
}
/**
* JSON的NULL值,即:JsonValue.NULL
*/
static final JsonValue NULL = new JsonValue() {
@Override
public ValueType getValueType() {
return ValueType.NULL;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof JsonValue) {
return getValueType().equals(((JsonValue)obj).getValueType());
}
return false;
}
@Override
public int hashCode() {
return ValueType.NULL.hashCode();
}
//返回字符串“null”
@Override
public String toString() {
return "null";
}
};
/**
* JSON的TRUE值,即:JsonValue.TRUE
*/
static final JsonValue TRUE = new JsonValue() {
@Override
public ValueType getValueType() {
return ValueType.TRUE;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof JsonValue) {
return getValueType().equals(((JsonValue)obj).getValueType());
}
return false;
}
@Override
public int hashCode() {
return ValueType.TRUE.hashCode();
}
//返回字符串“true”
@Override
public String toString() {
return "true";
}
};
/**
* JSON的FALSE值,即:JsonValue.FALSE
*/
static final JsonValue FALSE = new JsonValue() {
@Override
public ValueType getValueType() {
return ValueType.FALSE;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof JsonValue) {
return getValueType().equals(((JsonValue)obj).getValueType());
}
return false;
}
@Override
public int hashCode() {
return ValueType.FALSE.hashCode();
}
//返回字符串“false”
@Override
public String toString() {
return "false";
}
};
//获取JSON值的类型
ValueType getValueType();
@Override
String toString();
}
package javax.json;
/**
* 不可变的JSON字符串值
* @author TCM
* @create 2017年11月3日上午10:51:18
*/
public interface JsonString extends JsonValue {
String getString();
//返回JSON字符串值的char序列
CharSequence getChars();
@Override
boolean equals(Object obj);
@Override
int hashCode();
}
package javax.json;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* 目的:不变的JSON数值
*
* 注意:这个类中的一些方法语义是使用BigDecimal语义定义的。
* @author TCM
* @create 2017年11月3日下午1:18:38
*/
public interface JsonNumber extends JsonValue {
/**
* 判定JSON数值是不是整数
*
* 例如:
* JsonNumber num = ...
* if (num.isIntegral()) {
* num.longValue(); // or other methods to get integral value
* } else {
* num.doubleValue(); // or other methods to get decimal number value
* }
* @return 返回true,是整数
*/
boolean isIntegral();
/**
* @see java.math.BigDecimal#intValue()
*/
int intValue();
/**
* @see java.math.BigDecimal#intValueExact()
*/
int intValueExact();
long longValue();
long longValueExact();
/**
* @see java.math.BigDecimal#toBigInteger()
*/
BigInteger bigIntegerValue();
/**
* @see java.math.BigDecimal#toBigIntegerExact()
*/
BigInteger bigIntegerValueExact();
double doubleValue();
BigDecimal bigDecimalValue();
@Override
String toString();
@Override
boolean equals(Object obj);
@Override
int hashCode();
}