/**
* JSON(objects和arrays)中的两种结构化类型的超类型。
* {@link JsonObject object}和{@link JsonArray array}
* @author TCM
* @create 2017年11月3日下午1:29:03
*/
public interface JsonStructure extends JsonValue {
}
package javax.json;
import java.util.List;
/**
* 目的:JSON数组对象
*
* <p>JsonArray表示不变的JSON数组(序列从0开始)。还提供一种不变的列表视图。
*
* <p>从输入源读取JSON数据时,JsonArray对象将被创建,将构建一个数组。
* 下面是输入源中创建一个JSON数组对象示例:
* JsonReader jsonReader = Json.createReader(...);
* JsonArray array = jsonReader.readArray();
* jsonReader.close();
*
* <p>{@link JsonArrayBuilder}创建JSON数组:
* JsonArray array = Json.createArrayBuilder().build();
*
* <p>JSON数组示例:
* [
* { "type": "home", "number": "212 555-1234" },
* { "type": "fax", "number": "646 555-4567" }
* ]
* 如何创建:
* JsonArray value = Json.createArrayBuilder()
* .add(Json.createObjectBuilder()
* .add("type", "home")
* .add("number", "212 555-1234"))
* .add(Json.createObjectBuilder()
* .add("type", "fax")
* .add("number", "646 555-4567"))
* .build();
* 获取JSON数组元素:
* JsonObject home = array.getJsonObject(0);
* String number = home.getString("number");
*
* <p>注意问题:JsonArray实例是只读的JsonObject列表,任何尝试修改,则
* 抛出{@code UnsupportedOperationException}异常。
* @author TCM
* @create 2017年11月3日下午1:40:42
*/
public interface JsonArray extends JsonStructure, List<JsonValue> {
//根据索引获取JsonObject对象
JsonObject getJsonObject(int index);
//根据索引获取JsonArray对象(数组中的数组)
JsonArray getJsonArray(int index);
JsonNumber getJsonNumber(int index);//getJsonNumber(index).intValue()
JsonString getJsonString(int index);//getJsonNumber(index).getString()
//获取指定JsonValue类型的数组。可能抛出{@code ClassCastException}
<T extends JsonValue> List<T> getValuesAs(Class<T> clazz);
String getString(int index);
//根据索引获取string值,否则返回默认值
String getString(int index, String defaultValue);
int getInt(int index);
int getInt(int index, int defaultValue);
boolean getBoolean(int index);
boolean getBoolean(int index, boolean defaultValue);
//指定索引的值是否为null,若没有则为true。JsonValue.NULL
boolean isNull(int index);
}
package javax.json;
import java.util.Map;
/**
* 目的:JSON对象
*
* <p>JsonObject是不可变的JSON对象(无序的一个或多个name/value对的集合)。
* 提供对JSON对象不变的映射视图。
*
* <p>JSON对象的示例:
* {
* "firstName": "John", "lastName": "Smith", "age": 25,
* "address" : {
* "streetAddress": "21 2nd Street",
* "city": "New York",
* "state": "NY",
* "postalCode": "10021"
* },
* "phoneNumber": [
* { "type": "home", "number": "212 555-1234" },
* { "type": "fax", "number": "646 555-4567" }
* ]
* }
* 如何创建:
* JsonObject value = Json.createObjectBuilder()
* .add("firstName", "John")
* .add("lastName", "Smith")
* .add("age", 25)
* .add("address", Json.createObjectBuilder()
* .add("streetAddress", "21 2nd Street")
* .add("city", "New York")
* .add("state", "NY")
* .add("postalCode", "10021"))
* .add("phoneNumber", Json.createArrayBuilder()
* .add(Json.createObjectBuilder()
* .add("type", "home")
* .add("number", "212 555-1234"))
* .add(Json.createObjectBuilder()
* .add("type", "fax")
* .add("number", "646 555-4567")))
* .build();
*
* <p>JsonObject的创建方法:
* a. JsonReader jsonReader = Json.createReader(...);
* JsonObject object = jsonReader.readObject();
* jsonReader.close();
* b. JsonObject object = Json.createObjectBuilder().build();
* @author TCM
* @create 2017年11月6日上午9:55:21
*/
public interface JsonObject extends JsonStructure, Map<String, JsonValue> {
JsonArray getJsonArray(String name);
JsonObject getJsonObject(String name);
JsonNumber getJsonNumber(String name);
JsonString getJsonString(String name);
String getString(String name);
String getString(String name, String defaultValue);
int getInt(String name);
int getInt(String name, int defaultValue);
boolean getBoolean(String name);
boolean getBoolean(String name, boolean defaultValue);
boolean isNull(String name);
}