7.4 JSON支持
Limax提供完整的JSON支持(Java,C#,C++,Lua版本均提供与Javascript一致的JSON支持,使用上最大限度保证与javascript相同),便于同其它支持JSON的第三方系统进行交互。
-
7.4.2 解码
Javascript JSON.parse(string) Java JSON JSON.parse(String s); C# JSON JSON.parse(string s); C++ std::shared_ptr<JSON> JSON::parse(std::string s); Lua JSON.parse(string)
-
实现(Java,C#,C++)
1. JSON对象上可以通过isNull(),isBoolean(),isNumber(),isString(),isArray(),isObject()方法测试JSON元件类型。
2. isObject()返回true,指出该JSON对象描述的是JSON/Object,允许在该对象上执行下面的方法,否则抛出JSONException
Java JSON get(String key); C# JSON get(string key); C++ std::shared_ptr<JSON> get(const std::string& key) const; 上述方法,以key为字段名查询JSON/Object,返回相应字段的JSON表示。如果当前JSON/Object对应的key不存在,同样返回一个JSON对象,在该对象上调用isUndefined()方法,将返回true。
Java Set<String> keySet(); C# ICollection<string> keySet(); C++ std::vector<std::string> keySet() const; 上述方法,返回JSON/Object所有字段名
3. isArray()返回true,指出该JSON对象描述的是JSON/Array,允许在该对象上执行下面的方法,否则抛出JSONException
Java JSON get(int index); C# JSON get(int index); C++ std::shared_ptr<JSON> get(size_t index) const; 上述方法,以index为下标,查询JSON/Array,返回数组元素的JSON表示。如果index超出范围,同样返回一个JSON对象,在该对象上调用isUndefined()方法,将返回true。
Java JSON[] toArray(); C# JSON[] ToArray(); C++ std::vector<std::shared_ptr<JSON>> toArray() const; 上述方法,返回JSON/Array所有元素构成的JSON对象数组。
4. booleanValue()方法,与Javascript完全一致:
如果JSON对象描述的是JSON/true,返回true。
如果JSON对象描述的是JSON/false,返回false。
如果JSON对象描述的是JSON/null,或者isUndefined()测试为true,返回false
如果JSON对象描述的是JSON/Number,值为0,返回false
如果JSON对象描述的是JSON/String,长度为0,返回false
其余情况返回true
5. intValue(),longValue(),doubleValue()方法
如果JSON对象描述的是JSON/Number,执行相应的类型转换然后返回。
如果JSON对象描述的是JSON/String,并且该string能够转换为目标类型(没有数字格式错误),转换之后返回
其余情况抛出JSONException
6. toString()/ToString()方法
如果JSON对象描述的是JSON/String,返回相应的串值
如果JSON对象描述的是JSON/Number,转换为数值串返回
如果JSON对象描述的是JSON/true,返回串表示的true
如果JSON对象描述的是JSON/false,返回串表示的false
如果JSON对象描述的是JSON/null,返回串表示的null
如果JSON对象isUndefined()测试为true,返回串表示的undefined
其余情况,不同语言有不同返回,与各自的toString/ToString相关
-
示例
若有串 {"x":[10,"abc", 2], "y": null, "z": true}表示的JSON对象,返回x字段的首个元素可以有如下实现:
Javascript JSON.parse("{\"x\":[10,\"abc\", 2], \"y\":null,\"z\":true}").x[0] Java JSON.parse("{\"x\":[10,\"abc\", 2], \"y\":null, \"z\": true}").get("x").get(0).intValue(); C# JSON.parse("{\"x\":[10,\"abc\", 2], \"y\":null, \"z\": true}").get("x").get(0).intValue(); C++ JSON.parse("{\"x\":[10,\"abc\", 2], \"y\":null,\"z\":true}")->get("x")->get(0)->intValue(); Lua JSON.parse("{\"x\":[10,\"abc\", 2], \"y\":null,\"z\":true}").x[1] 与Javascript版本比较,其它版本的实现抛开语言差异看,几乎完全一致。
多数情况下,都只是简单使用已知格式的JSON元件描述,像上面的例子一样,无需作更多的测试,直接连写即可。
-