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元件描述,像上面的例子一样,无需作更多的测试,直接连写即可。


上一页 下一页