Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

class JsonArray

public class JsonArray <: JsonValue {
    public init()
    public init(list: ArrayList<JsonValue>)
    public init(list: Array<JsonValue>)
}

功能:此类为 JsonValue 实现子类,主要用于封装数组类型的 JSON 数据。

父类型:

示例:

使用示例见 JsonArray 使用示例

init()

public init()

功能:创建空 JsonArray

示例:

import stdx.encoding.json.*

main() {
    let jsonArray: JsonArray = JsonArray()
    println(jsonArray)
    println("JsonValue的数量: ${jsonArray.size()}")
}

运行结果:

[]
JsonValue的数量: 0

init(Array<JsonValue>)

public init(list: Array<JsonValue>)

功能:将指定的 Array 类型实例封装成 JsonArray 实例。

参数:

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    let a: JsonValue = JsonNull()
    let b: JsonValue = JsonBool(true)
    let c: JsonValue = JsonInt(123)
    let d: JsonValue = JsonString("hello")
    let e: JsonValue = JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))]))

    let array: Array<JsonValue> = [a, b, c, d, e]
    let jsonArray: JsonArray = JsonArray(array)

    println(jsonArray)
}

运行结果:

[null,true,123,"hello",{"hello":"world"}]

init(ArrayList<JsonValue>)

public init(list: ArrayList<JsonValue>)

功能:将指定的 ArrayList 类型实例封装成 JsonArray 实例。

参数:

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    var a: JsonValue = JsonNull()
    var b: JsonValue = JsonBool(true)
    var c: JsonValue = JsonInt(123)
    var d: JsonValue = JsonString("hello")
    var e: JsonValue = JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))]))

    var list: ArrayList<JsonValue> = ArrayList<JsonValue>()
    list.add(a)
    list.add(b)
    list.add(c)
    list.add(d)
    list.add(e)

    let jsonArray: JsonArray = JsonArray(list)
    println(jsonArray)
}

运行结果:

[null,true,123,"hello",{"hello":"world"}]

func add(JsonValue)

public func add(jv: JsonValue): JsonArray

功能:向 JsonArray 中加入 JsonValue 数据。

参数:

返回值:

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    println("初始 JsonArray: ${jsonArray}")
    println("初始数量: ${jsonArray.size()}")

    // 添加不同类型的 JsonValue
    jsonArray = jsonArray.add(JsonNull())
    println("添加 JsonNull 后: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    jsonArray = jsonArray.add(JsonBool(true))
    println("添加 JsonBool(true) 后: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    jsonArray = jsonArray.add(JsonString("hello"))
    println("添加 JsonString(\"hello\") 后: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))
    println("添加 JsonObject 后: ${jsonArray}")
    println("数量: ${jsonArray.size()}")
}

运行结果:

初始 JsonArray: []
初始数量: 0
添加 JsonNull 后: [null]
数量: 1
添加 JsonBool(true) 后: [null,true]
数量: 2
添加 JsonString("hello") 后: [null,true,"hello"]
数量: 3
添加 JsonObject 后: [null,true,"hello",{"hello":"world"}]
数量: 4

func get(Int64)

public func get(index: Int64): Option<JsonValue>

功能:获取 JsonArray 中指定索引的 JsonValue,并用 Option<JsonValue> 封装。

参数:

  • index: Int64 - 指定的索引。

返回值:

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(100))
    jsonArray = jsonArray.add(JsonString("hello"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    println("JsonArray 内容: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    // 测试获取不同索引的元素
    let opt1 = jsonArray.get(0)
    println("索引 0 的值: ${opt1.getOrThrow()}")

    let opt2 = jsonArray.get(2)
    println("索引 2 的值: ${opt2.getOrThrow()}")

    let opt3 = jsonArray.get(4)
    println("索引 4 的值: ${opt3.getOrThrow()}")

    // 测试超出范围的索引
    let opt4 = jsonArray.get(10)
    if (let Some(v) <- opt4) {
        println("索引 10 的值: ${v}")
    } else {
        println("索引 10 的值不存在")
    }
}

运行结果:

JsonArray 内容: [null,true,100,"hello",{"hello":"world"}]
数量: 5
索引 0 的值: null
索引 2 的值: 100
索引 4 的值: {"hello":"world"}
索引 10 的值不存在

func getItems()

public func getItems(): ArrayList<JsonValue>

功能:获取 JsonArray 中的 items 数据。

返回值:

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(100))
    jsonArray = jsonArray.add(JsonString("hello"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    println("JsonArray 内容: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    // 获取 items 列表
    let items = jsonArray.getItems()
    let itemsSize = items.size
    println("获取的 items 列表数量: ${itemsSize}")

    // 遍历 items 列表
    for (i in items) {
        println("值: ${i}")
    }
}

运行结果:

JsonArray 内容: [null,true,100,"hello",{"hello":"world"}]
数量: 5
获取的 items 列表数量: 5
值: null
值: true
值: 100
值: "hello"
值: {"hello":"world"}

func kind()

public func kind(): JsonKind

功能:返回当前 JsonArray 所属的 JsonKind 类型(JsArray)。

返回值:

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(100))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    // 获取 JsonArray 的 kind
    let kind = jsonArray.kind()

    // 使用 match 语句来处理 JsonKind 枚举
    match (kind) {
        case JsonKind.JsArray => println("变量 jsonArray 的 kind 是 JsArray")
        case _ => println("变量 jsonArray 的 kind 不是 JsArray")
    }
}

运行结果:

变量 jsonArray 的 kind 是 JsArray

func size()

public func size(): Int64

功能:获取 JsonArrayJsonValue 的数量。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()

    println("初始 JsonArray 数量: ${jsonArray.size()}")

    // 添加元素并检查数量变化
    jsonArray = jsonArray.add(JsonNull())
    println("添加 JsonNull 后的数量: ${jsonArray.size()}")

    jsonArray = jsonArray.add(JsonBool(true))
    println("添加 JsonBool 后的数量: ${jsonArray.size()}")
    // 验证最终内容
    println("最终 JsonArray 内容: ${jsonArray}")
}

运行结果:

初始 JsonArray 数量: 0
添加 JsonNull 后的数量: 1
添加 JsonBool 后的数量: 2
最终 JsonArray 内容: [null,true]

func toJsonString()

public func toJsonString(): String

功能:将 JsonArray 转换为 JSON 格式的 (带有空格换行符) 的字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(123))
    jsonArray = jsonArray.add(JsonString("hello"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    println("JsonArray 内容: ${jsonArray}")
    println("数量: ${jsonArray.size()}")

    // 使用 toJsonString 方法
    let jsonString = jsonArray.toJsonString()
    println("toJsonString 结果:")
    println(jsonString)

    // 对比 toString 方法
    let toStringResult = jsonArray
    println("toString 结果: ${toStringResult}")
}

运行结果:

JsonArray 内容: [null,true,123,"hello",{"hello":"world"}]
数量: 5
toJsonString 结果:
[
  null,
  true,
  123,
  "hello",
  {
    "hello": "world"
  }
]
toString 结果: [null,true,123,"hello",{"hello":"world"}]

func toJsonString(Int64, Bool, String)

public func toJsonString(depth: Int64, bracketInNewLine!: Bool = false, indent!: String = "  "): String

功能:将 JsonArray 转换为 JSON 格式的字符串。该函数将指定初始的缩进深度、第一个括号后是否换行以及缩进字符串。

参数:

  • depth: Int64 - 指定的缩进深度。
  • bracketInNewLine!: Bool - 第一个括号是否换行,如果为 true,第一个括号将另起一行并且按照指定的深度缩进。
  • indent!: String - 指定的缩进字符串,缩进字符串中只允许空格和制表符的组合,默认为两个空格。

返回值:

  • String - 转换后的 JSON 格式字符串。

异常:

  • IllegalArgumentException - 如果 depth 为负数,或 indent 中存在 ' ' 和 '\t' 以外的字符,则抛出异常。

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(123))
    jsonArray = jsonArray.add(JsonString("hello"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    println("=== 自定义参数toJsonString ===")
    let result = jsonArray.toJsonString(1, bracketInNewLine: true, indent: " ")
    println(result)
    println("=== 默认toJsonString ===")
    let result1 = jsonArray.toJsonString()
    println(result1)
}

运行结果:

=== 自定义参数toJsonString ===
 [
  null,
  true,
  123,
  "hello",
  {
   "hello": "world"
  }
 ]
=== 默认toJsonString ===
[
  null,
  true,
  123,
  "hello",
  {
    "hello": "world"
  }
]

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:将 JsonArray 转换为 JSON 格式的 (带有空格换行符) 的字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonString("~!@#$%^&*();':\"/.,<>?\\|"))

    // 使用 toJsonString 方法
    let jsonString = jsonArray.toJsonString()
    println("toJsonString 结果(仅&符号转义):")
    println(jsonString)

    // 使用 toJsonStringWithoutEscaping 方法
    let jsonStringWithoutEscaping = jsonArray.toJsonStringWithoutEscaping()
    println("toJsonStringWithoutEscaping 结果(无转义):")
    println(jsonStringWithoutEscaping)
}

运行结果:

toJsonString 结果(仅&符号转义):
[
  "~!@#$%^\u0026*();':\"/.,<>?\\|"
]
toJsonStringWithoutEscaping 结果(无转义):
[
  "~!@#$%^&*();':\"/.,<>?\\|"
]

func toJsonStringWithoutEscaping(Int64, Bool, String)

public func toJsonStringWithoutEscaping(depth: Int64, bracketInNewLine!: Bool = false, indent!: String = "  "): String

功能:将 JsonArray 转换为 JSON 格式的字符串。该函数将指定初始的缩进深度、第一个括号后是否换行以及缩进字符串,不对 html 特殊字符 & 转义。

参数:

  • depth: Int64 - 指定的缩进深度。
  • bracketInNewLine!: Bool - 第一个括号是否换行,如果为 true,第一个括号将另起一行并且按照指定的深度缩进。
  • indent!: String - 指定的缩进字符串,缩进字符串中只允许空格和制表符的组合,默认为两个空格。

返回值:

  • String - 转换后的 JSON 格式字符串。

异常:

  • IllegalArgumentException - 如果 depth 为负数,或 indent 中存在 ' ' 和 '\t' 以外的字符,则抛出异常。

示例:

import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonString("~!@#$%^&*();':\"/.,<>?\\|"))

    // 使用 toJsonString 方法
    let jsonString = jsonArray.toJsonString(2, bracketInNewLine: true, indent: " ")
    println("toJsonString (带参数) 结果(仅&符号转义):")
    println(jsonString)

    // 使用 toJsonStringWithoutEscaping 方法
    let jsonStringWithoutEscaping = jsonArray.toJsonStringWithoutEscaping(2, bracketInNewLine: true, indent: " ")
    println("toJsonStringWithoutEscaping (带参数) 结果(无转义):")
    println(jsonStringWithoutEscaping)
}

运行结果:

toJsonString (带参数) 结果(仅&符号转义):
  [
   "~!@#$%^\u0026*();':\"/.,<>?\\|"
  ]
toJsonStringWithoutEscaping (带参数) 结果(无转义):
  [
   "~!@#$%^&*();':\"/.,<>?\\|"
  ]

func toString()

public func toString(): String

功能:将 JsonArray 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(123))
    jsonArray = jsonArray.add(JsonString("hello&world"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    // 使用 toString 方法
    let stringResult = jsonArray
    println("toString 结果: ${stringResult}")
}

运行结果:

toString 结果: [null,true,123,"hello\u0026world",{"hello":"world"}]

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:将 JsonArray 转换为字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的字符串。

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(123))
    jsonArray = jsonArray.add(JsonString("hello&world"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    // 使用 toStringWithoutEscaping 方法
    let stringResult = jsonArray
    println("toString 结果: ${stringResult.toStringWithoutEscaping()}")
}

运行结果:

toString 结果: [null,true,123,"hello&world",{"hello":"world"}]

operator func [](Int64)

public operator func [](index: Int64): JsonValue

功能:获取 JsonArray 中指定索引的 JsonValue

参数:

  • index: Int64 - 指定的索引。

返回值:

异常:

示例:

import std.collection.*
import stdx.encoding.json.*

main() {
    var jsonArray: JsonArray = JsonArray()
    jsonArray = jsonArray.add(JsonNull())
    jsonArray = jsonArray.add(JsonBool(true))
    jsonArray = jsonArray.add(JsonInt(123))
    jsonArray = jsonArray.add(JsonString("hello&world"))
    jsonArray = jsonArray.add(JsonObject(HashMap<String, JsonValue>([("hello", JsonString("world"))])))

    println("JsonArray 内容: ${jsonArray}")

    // 使用下标操作符访问元素
    println("使用下标操作符访问元素:")
    let element0 = jsonArray[0]
    println("索引 0 的值: ${element0}")

    let element1 = jsonArray[1]
    println("索引 1 的值: ${element1}")

    let element3 = jsonArray[3]
    println("索引 3 的值: ${element3}")

    // 测试越界访问(应该会抛出异常)
    println("测试越界访问:")
    try {
        let elementOut = jsonArray[10]
        println("索引 10 的值: ${elementOut}")
    } catch (e: Exception) {
        println("捕获到异常: ${e.message}")
    }
}

运行结果:

JsonArray 内容: [null,true,123,"hello\u0026world",{"hello":"world"}]
使用下标操作符访问元素:
索引 0 的值: null
索引 1 的值: true
索引 3 的值: "hello\u0026world"
测试越界访问:
捕获到异常: The index 10 of JsonArray does not exist.

class JsonBool

public class JsonBool <: JsonValue {
    public init(bv: Bool)
}

功能:此类为 JsonValue 实现子类,主要用于封装 true 或者 false 的 JSON 数据。

父类型:

init(Bool)

public init(bv: Bool)

功能:将指定的 Bool 类型实例封装成 JsonBool 实例。

参数:

  • bv: Bool - Bool 类型。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    println("JsonBool(true) 创建的对象: ${jsonTrue}")
}

运行结果:

JsonBool(true) 创建的对象: true

func getValue()

public func getValue(): Bool

功能:获取 JsonBool 中 value 的实际值。

返回值:

  • Bool - value 的实际值。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueValue = jsonTrue.getValue()

    println("JsonBool(true) 的值: ${trueValue}")
}

运行结果:

JsonBool(true) 的值: true

func kind()

public func kind(): JsonKind

功能:返回当前 JsonBool 所属的 JsonKind 类型(JsBool)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueKind = jsonTrue.kind()

    // 使用 match 语句处理类型
    match (trueKind) {
        case JsonKind.JsBool => println("变量jsonTrue的类型是JsBool")
        case _ => println("变量jsonTrue的类型不是JsBool")
    }
}

运行结果:

变量jsonTrue的类型是JsBool

func toJsonString()

public func toJsonString(): String

功能:将 JsonBool 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueJsonStr = jsonTrue.toJsonString()

    println("JsonBool(true) 的 JSON 字符串: ${trueJsonStr}")
}

运行结果:

JsonBool(true) 的 JSON 字符串: true

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:等同 toJsonString()。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueJsonStr = jsonTrue.toJsonStringWithoutEscaping()

    println("等同 toJsonString(): ${trueJsonStr}")
}

运行结果:

等同 toJsonString(): true

func toString()

public func toString(): String

功能:将 JsonBool 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueStr = jsonTrue.toString()

    println("JsonBool(true) 的字符串表示: ${trueStr}")
}

运行结果:

JsonBool(true) 的字符串表示: true

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:等同 toString()。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonTrue: JsonBool = JsonBool(true)

    var trueStr = jsonTrue.toStringWithoutEscaping()

    println("等同toString(): ${trueStr}")
}

运行结果:

等同toString(): true

class JsonFloat

public class JsonFloat <: JsonValue {
    public init(fv: Float64)
    public init(v: Int64)
}

功能:此类为 JsonValue 实现子类,主要用于封装浮点类型的 JSON 数据。

父类型:

init(Float64)

public init(fv: Float64)

功能:将指定的 Float64 类型实例封装成 JsonFloat 实例。

参数:

  • fv: Float64 - Float64 类型。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    println("JsonFloat(3.14159) 创建的对象: ${jsonFloat}")
}

运行结果:

JsonFloat(3.14159) 创建的对象: 3.141590

init(Int64)

public init(v: Int64)

功能:将指定的 Int64 类型实例封装成 JsonFloat 实例。

参数:

  • v: Int64 - Int64 类型。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(42)

    println("JsonFloat(42) 创建的对象: ${jsonFloat}")
}

运行结果:

JsonFloat(42) 创建的对象: 42.000000

func getValue()

public func getValue(): Float64

功能:获取 JsonFloat 中 value 的实际值。

返回值:

  • Float64 - value 的实际值。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let value = jsonFloat.getValue()

    println("JsonFloat(3.14159) 的值: ${value}")
}

运行结果:

JsonFloat(3.14159) 的值: 3.141590

func kind()

public func kind(): JsonKind

功能:返回当前 JsonFloat 所属的 JsonKind 类型(JsFloat)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let kind = jsonFloat.kind()

    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsFloat => println("变量jsonFloat的类型是JsFloat")
        case _ => println("变量jsonFloat的类型不是JsFloat")
    }
}

运行结果:

变量jsonFloat的类型是JsFloat

func toJsonString()

public func toJsonString(): String

功能:将 JsonFloat 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let jsonStr = jsonFloat.toJsonString()

    println("JsonFloat(3.14159) 的 JSON 字符串: ${jsonStr}")
}

运行结果:

JsonFloat(3.14159) 的 JSON 字符串: 3.141590

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:等同 toJsonString()。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let jsonStr = jsonFloat.toJsonStringWithoutEscaping()

    println("等同 toJsonString(): ${jsonStr}")
}

运行结果:

等同 toJsonString(): 3.141590

func toString()

public func toString(): String

功能:将 JsonFloat 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let str = jsonFloat.toString()

    println("JsonFloat(3.14159) 的字符串表示: ${str}")
}

运行结果:

JsonFloat(3.14159) 的字符串表示: 3.141590

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:等同 toString()。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    let jsonFloat: JsonFloat = JsonFloat(3.14159)

    let str = jsonFloat.toStringWithoutEscaping()

    println("等同toString(): ${str}")
}

运行结果:

等同toString(): 3.141590

class JsonInt

public class JsonInt <: JsonValue {
    public init(iv: Int64)
}

功能:此类为 JsonValue 实现子类,主要用于封装整数类型的 JSON 数据。

父类型:

init(Int64)

public init(iv: Int64)

功能:将指定的 Int64 类型实例封装成 JsonInt 实例。

参数:

  • iv: Int64 - 用于创建 JsonInt 的 Int64。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    println("JsonInt(42) 创建的对象: ${jsonInt}")
}

运行结果:

JsonInt(42) 创建的对象: 42

func getValue()

public func getValue(): Int64

功能:获取 JsonInt 中 value 的实际值。

返回值:

  • Int64 - value 的实际值。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var value = jsonInt.getValue()

    println("JsonInt(42) 的值: ${value}")
}

运行结果:

JsonInt(42) 的值: 42

func kind()

public func kind(): JsonKind

功能:返回当前 JsonInt 所属的 JsonKind 类型(JsInt)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var kind = jsonInt.kind()

    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsInt => println("变量jsonInt的类型是JsInt")
        case _ => println("变量jsonInt的类型不是JsInt")
    }
}

运行结果:

变量jsonInt的类型是JsInt

func toJsonString()

public func toJsonString(): String

功能:将 JsonInt 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var jsonStr = jsonInt.toJsonString()

    println("JsonInt(42) 的 JSON 字符串: ${jsonStr}")
}

运行结果:

JsonInt(42) 的 JSON 字符串: 42

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:等同 toJsonString()。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var jsonStr = jsonInt.toJsonStringWithoutEscaping()

    println("等同 toJsonString(): ${jsonStr}")
}

运行结果:

等同 toJsonString(): 42

func toString()

public func toString(): String

功能:将 JsonInt 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var str = jsonInt.toString()

    println("JsonInt(42) 的字符串表示: ${str}")
}

运行结果:

JsonInt(42) 的字符串表示: 42

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:等同 toString()。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonInt: JsonInt = JsonInt(42)

    var str = jsonInt.toStringWithoutEscaping()

    println("等同toString(): ${str}")
}

运行结果:

等同toString(): 42

class JsonNull

public class JsonNull <: JsonValue

功能:此类为 JsonValue 实现子类,主要用于封装 null 的 JSON 数据。

父类型:

func kind()

public func kind(): JsonKind

功能:返回当前 JsonNull 所属的 JsonKind 类型(JsNull)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonNull: JsonNull = JsonNull()

    let kind = jsonNull.kind()
    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsNull => println("变量jsonNull的类型是JsNull")
        case _ => println("变量jsonNull的类型不是JsNull")
    }
}

运行结果:

变量jsonNull的类型是JsNull

func toJsonString()

public func toJsonString(): String

功能:将 JsonNull 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonNull: JsonNull = JsonNull()

    var jsonStr = jsonNull.toJsonString()
    println("JsonNull 的 JSON 字符串: ${jsonStr}")
}

运行结果:

JsonNull 的 JSON 字符串: null

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:等同 toJsonString()。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonNull: JsonNull = JsonNull()

    var jsonStr = jsonNull.toJsonStringWithoutEscaping()

    println("等同 toJsonString(): ${jsonStr}")
}

运行结果:

等同 toJsonString(): null

func toString()

public func toString(): String

功能:将 JsonNull 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonNull: JsonNull = JsonNull()

    var str = jsonNull.toString()
    println("JsonNull 的字符串表示: ${str}")
}

运行结果:

JsonNull 的字符串表示: null

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:等同 toString()。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonNull: JsonNull = JsonNull()

    var str = jsonNull.toStringWithoutEscaping()

    println("等同 toJsonString(): ${str}")
}

运行结果:

等同 toJsonString(): null

class JsonObject

public class JsonObject <: JsonValue {
    public init()
    public init(map: HashMap<String, JsonValue>)
}

功能:此类为 JsonValue 实现子类,主要用于封装 object 类型的 JSON 数据。

父类型:

init()

public init()

功能:创建空 JsonObject

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()

    println("创建空JsonObject: ${jsonObject}")
}

运行结果:

创建空JsonObject: {}

init(HashMap<String, JsonValue>)

public init(map: HashMap<String, JsonValue>)

功能:将指定的 HashMap 类型实例封装成 JsonObject 实例。

参数:

  • map: HashMap<String, JsonValue> - data 数据。

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    var fields = HashMap<String, JsonValue>()
    fields.add("name", JsonString("张三"))
    fields.add("age", JsonInt(25))
    fields.add("student", JsonBool(true))

    // 使用HashMap创建新的JsonObject
    var jsonObject2: JsonObject = JsonObject(fields)

    println("使用HashMap创建JsonObject: ${jsonObject2}")
}

运行结果:

使用HashMap创建JsonObject: {"name":"张三","age":25,"student":true}

func containsKey(String)

public func containsKey(key: String): Bool

功能:判断 JsonObject 中是否存在 key。

参数:

  • key: String - 指定的 key。

返回值:

  • Bool - 存在返回 true,不存在返回 false。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))

    var hasName = jsonObject.containsKey("name")
    var hasAddress = jsonObject.containsKey("address")

    println("JsonObject是否包含name键: ${hasName}")
    println("JsonObject是否包含address键: ${hasAddress}")
}

运行结果:

JsonObject是否包含name键: true
JsonObject是否包含address键: false

func get(String)

public func get(key: String): Option<JsonValue>

功能:获取 JsonObject 中 key 对应的 JsonValue,并用 Option<JsonValue> 封装。

参数:

  • key: String - 指定的 key。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))

    var nameValue = jsonObject.get("name")
    var ageValue = jsonObject.get("age")
    var addressValue = jsonObject.get("address") // 不存在的键

    // 使用match处理Option类型
    var nameStr = match (nameValue) {
        case Some(value) => value
        case None => "键不存在"
    }

    var ageStr = match (ageValue) {
        case Some(value) => value
        case None => "键不存在"
    }

    var addressStr = match (addressValue) {
        case Some(value) => value
        case None => "键不存在"
    }

    println("name的值: ${nameStr}")
    println("age的值: ${ageStr}")
    println("address的值: ${addressStr}")
}

运行结果:

name的值: "张三"
age的值: 25
address的值: 键不存在

func getFields()

public func getFields(): HashMap<String, JsonValue>

功能:获取 JsonObject 中的 fields 数据。

返回值:

示例:

import stdx.encoding.json.*
import std.collection.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))

    var fields: HashMap<String, JsonValue> = jsonObject.getFields()

    println("JsonObject的字段数据: ${jsonObject}")
    println("获取到的字段HashMap: ${fields}")
}

运行结果:

JsonObject的字段数据: {"name":"张三","age":25,"student":true}
获取到的字段HashMap: [(name, "张三"), (age, 25), (student, true)]

func kind()

public func kind(): JsonKind

功能:返回当前 JsonObject 所属的 JsonKind 类型(JsObject)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))

    var kind = jsonObject.kind()

    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsObject => println("变量jsonObject的类型是JsObject")
        case _ => println("变量jsonObject的类型不是JsObject")
    }
}

运行结果:

变量jsonObject的类型是JsObject

func put(String, JsonValue)

public func put(key: String, v: JsonValue): Unit

功能:向 JsonObject 中加入 key-JsonValue 数据。

参数:

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()

    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))

    println("添加键值对后的JsonObject: ${jsonObject}")
}

运行结果:

添加键值对后的JsonObject: {"name":"张三","age":25,"student":true}

func size()

public func size(): Int64

功能:获取 JsonObject 中 fields 存入 string-JsonValue 的数量。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()

    var initialSize = jsonObject.size()
    println("初始JsonObject的大小: ${initialSize}")

    jsonObject.put("name", JsonString("张三"))
    var sizeAfterAdd1 = jsonObject.size()
    println("添加一个键值对后的大小: ${sizeAfterAdd1}")

    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))
    var finalSize = jsonObject.size()
    println("添加多个键值对后的最终大小: ${finalSize}")
}

运行结果:

初始JsonObject的大小: 0
添加一个键值对后的大小: 1
添加多个键值对后的最终大小: 3

func toJsonString()

public func toJsonString(): String

功能:将 JsonObject 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))

    var jsonStr = jsonObject.toJsonString()

    println("JsonObject转换为JSON字符串:\n${jsonStr}")
}

运行结果:

JsonObject转换为JSON字符串:
{
  "name": "张三",
  "age": 25,
  "student": true
}

func toJsonString(Int64, Bool, String)

public func toJsonString(depth: Int64, bracketInNewLine!: Bool = false, indent!: String = "  "): String

功能:将 JsonObject 转换为 JSON 格式的字符串。该函数将指定初始的缩进深度、第一个括号后是否换行以及缩进字符串。

参数:

  • depth: Int64 - 缩进深度。
  • bracketInNewLine!: Bool - 第一个括号是否换行,如果为 true,第一个括号将另起一行并且按照指定的深度缩进。
  • indent!: String - 指定的缩进字符串,缩进字符串中只允许空格和制表符的组合,默认为两个空格。

返回值:

  • String - 转换后的 JSON 格式字符串。

异常:

  • IllegalArgumentException - 如果 depth 为负数,或 indent 中存在 ' ' 和 '\t' 以外的字符,则抛出异常。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))

    // 使用参数的toJsonString方法,使用命名参数
    var jsonStr1 = jsonObject.toJsonString(0, bracketInNewLine: false, indent: "  ") // 默认缩进
    var jsonStr2 = jsonObject.toJsonString(1, bracketInNewLine: true, indent: "    ") // 深度1,第一个括号换行,4个空格缩进

    println("默认格式的JSON字符串:\n${jsonStr1}")
    println("指定参数的JSON字符串:\n${jsonStr2}")
}

运行结果:

默认格式的JSON字符串:
{
  "name": "张三",
  "age": 25,
  "student": true
}
指定参数的JSON字符串:
    {
        "name": "张三",
        "age": 25,
        "student": true
    }

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:将 JsonObject 转换为 JSON 格式的 (带有空格换行符) 字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三&李四")) // 包含&符号
    jsonObject.put("description", JsonString("学生<25岁"))

    var jsonStr = jsonObject.toJsonStringWithoutEscaping()
    var normalJsonStr = jsonObject.toJsonString() // 对比正常方法

    println("不转义HTML特殊字符的JSON字符串:\n${jsonStr}")
    println("正常转义的JSON字符串:\n${normalJsonStr}")
}

运行结果:

不转义HTML特殊字符的JSON字符串:
{
  "name": "张三&李四",
  "description": "学生<25岁"
}
正常转义的JSON字符串:
{
  "name": "张三\u0026李四",
  "description": "学生<25岁"
}

func toJsonStringWithoutEscaping(Int64, Bool, String)

public func toJsonStringWithoutEscaping(depth: Int64, bracketInNewLine!: Bool = false, indent!: String = "  "): String

功能:将 JsonObject 转换为 JSON 格式的字符串。该函数将指定初始的缩进深度、第一个括号后是否换行以及缩进字符串,不对 html 特殊字符 & 转义。

参数:

  • depth: Int64 - 缩进深度。
  • bracketInNewLine!: Bool - 第一个括号是否换行,如果为 true,第一个括号将另起一行并且按照指定的深度缩进。
  • indent!: String - 指定的缩进字符串,缩进字符串中只允许空格和制表符的组合,默认为两个空格。

返回值:

  • String - 转换后的 JSON 格式字符串。

异常:

  • IllegalArgumentException - 如果 depth 为负数,或 indent 中存在 ' ' 和 '\t' 以外的字符,则抛出异常。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三&李四")) // 包含&符号
    jsonObject.put("description", JsonString("学生<25岁"))

    // 使用参数的toJsonStringWithoutEscaping方法
    var jsonStr1 = jsonObject.toJsonStringWithoutEscaping(0, bracketInNewLine: false, indent: "  ") // 默认缩进
    var jsonStr2 = jsonObject.toJsonStringWithoutEscaping(1, bracketInNewLine: true, indent: "    ") // 深度1,第一个括号换行,4个空格缩进

    println("不转义的默认格式JSON字符串:\n${jsonStr1}")
    println("不转义的指定参数JSON字符串:\n${jsonStr2}")
}

运行结果:

不转义的默认格式JSON字符串:
{
  "name": "张三&李四",
  "description": "学生<25岁"
}
不转义的指定参数JSON字符串:
    {
        "name": "张三&李四",
        "description": "学生<25岁"
    }

func toString()

public func toString(): String

功能:将 JsonObject 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))
    jsonObject.put("student", JsonBool(true))

    var str = jsonObject.toString()

    println("JsonObject的字符串表示: ${str}")
}

运行结果:

JsonObject的字符串表示: {"name":"张三","age":25,"student":true}

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:将 JsonObject 转换为字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三&李四")) // 包含&符号
    jsonObject.put("description", JsonString("学生<25岁"))

    var str = jsonObject.toStringWithoutEscaping()
    var normalStr = jsonObject.toString() // 对比正常方法

    println("不转义HTML特殊字符的字符串: ${str}")
    println("正常转义的字符串: ${normalStr}")
}

运行结果:

不转义HTML特殊字符的字符串: {"name":"张三&李四","description":"学生<25岁"}
正常转义的字符串: {"name":"张三\u0026李四","description":"学生<25岁"}

operator func [](String)

public operator func [](key: String): JsonValue

功能:获取 JsonObject 中 key 对应的 JsonValue

参数:

  • key: String - 指定的 key。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonObject: JsonObject = JsonObject()
    jsonObject.put("name", JsonString("张三"))
    jsonObject.put("age", JsonInt(25))

    // 使用索引操作符获取值
    var nameValue = jsonObject["name"]

    var ageValue = jsonObject["age"]

    println("通过索引操作符获取name: ${nameValue}")
    println("通过索引操作符获取age: ${ageValue}")
}

运行结果:

通过索引操作符获取name: "张三"
通过索引操作符获取age: 25

class JsonString

public class JsonString <: JsonValue {
    public init(sv: String)
}

功能:此类为 JsonValue 实现子类,主要用于封装字符串类型的 JSON 数据。

父类型:

init(String)

public init(sv: String)

功能:将指定的 String 类型实例封装成 JsonString 实例。

参数:

  • sv: String - String 类型。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello, 世界")

    println("JsonString(\"Hello, 世界\") 创建的对象: ${jsonString}")
}

运行结果:

JsonString("Hello, 世界") 创建的对象: "Hello, 世界"

func getValue()

public func getValue(): String

功能:获取 JsonString 中 value 的实际值。

返回值:

  • String - value 的实际值。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello, 世界")

    var value = jsonString.getValue()

    println("JsonString(\"Hello, 世界\") 的值: ${value}")
}

运行结果:

JsonString("Hello, 世界") 的值: Hello, 世界

func kind()

public func kind(): JsonKind

功能:返回当前 JsonString 所属的 JsonKind 类型(JsString)。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello, 世界")

    var kind = jsonString.kind()

    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsString => println("变量jsonString的类型是JsString")
        case _ => println("变量jsonString的类型不是JsString")
    }
}

运行结果:

变量jsonString的类型是JsString

func toJsonString()

public func toJsonString(): String

功能:将 JsonString 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello, 世界")

    var jsonStr = jsonString.toJsonString()

    println("JsonString(\"Hello, 世界\") 的 JSON 字符串: ${jsonStr}")
}

运行结果:

JsonString("Hello, 世界") 的 JSON 字符串: "Hello, 世界"

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:将 JsonString 转换为 JSON 格式的 (带有空格换行符) 字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello & World <测试>")

    var jsonStr = jsonString.toJsonStringWithoutEscaping()
    var normalJsonStr = jsonString.toJsonString() // 对比正常方法

    println("不转义HTML特殊字符的JSON字符串: ${jsonStr}")
    println("正常转义的JSON字符串: ${normalJsonStr}")
}

运行结果:

不转义HTML特殊字符的JSON字符串: "Hello & World <测试>"
正常转义的JSON字符串: "Hello \u0026 World <测试>"

func toString()

public func toString(): String

功能:将 JsonString 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello, 世界")

    var str = jsonString.toString()

    println("JsonString(\"Hello, 世界\") 的字符串表示: ${str}")
}

运行结果:

JsonString("Hello, 世界") 的字符串表示: "Hello, 世界"

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:将 JsonString 转换为字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString: JsonString = JsonString("Hello & World <测试>")

    var str = jsonString.toStringWithoutEscaping()
    var normalStr = jsonString.toString() // 对比正常方法

    println("不转义HTML特殊字符的字符串: ${str}")
    println("正常转义的字符串: ${normalStr}")
}

运行结果:

不转义HTML特殊字符的字符串: "Hello & World <测试>"
正常转义的字符串: "Hello \u0026 World <测试>"

class JsonValue

sealed abstract class JsonValue <: ToString

功能:此类为 JSON 数据层,主要用于 JsonValue 和 String 数据之间的互相转换。

抽象类 JsonValue 提供了 String 类型和具体的 JSON 类型相互转换的接口,以及具体的 JSON 类型判断功能。

父类型:

  • ToString

示例:

使用示例见JsonValue 和 String 互相转换

static func fromStr(String)

public static func fromStr(s: String): JsonValue

功能:将字符串数据解析为 JsonValue。对于整数,支持前导 '0b','0o','0x'(不区分大小写),分别表示二进制,八进制和十六进制。字符串解析失败时将打印错误字符及其行数和列数,其中列数从错误字符所在行的非空格字符起开始计算。

JSON 在解析 String 转换为 JsonValue 时,转义字符 \ 之后只能对应 JSON 支持的转义字符(b、f、n、r、t、u、\、"、/),其中 \u 的格式为:\uXXXX,X 为十六进制数,例:\u0041 代表字符 'A'。

参数:

  • s: String - 传入字符串,暂不支持 "?" 和特殊字符。

返回值:

异常:

  • JsonException - 如果内存分配失败,或解析字符串出错,抛出异常。

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"name": "张三", "age": 25, "student": true}"##
    // JSON解析JsonObject
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    println("JsonValue 是 JsonString?: ${jsonValue is JsonString}")
    println("JsonValue 是 JsonObject?: ${jsonValue is JsonObject}")
    println("解析后的JsonValue: ${jsonValue}")

    // JSON解析JsonString合法的转义字符
    let str1 = ##""\n""##
    let jsonValue1 = JsonValue.fromStr(str1)
    println("解析JsonString: ${jsonValue1}")

    // JSON解析JsonString合法的转义字符
    let str2 = ##""\u0041""##
    let jsonValue2 = JsonValue.fromStr(str2)
    println("解析JsonString: ${jsonValue2}")

    // JSON解析JsonString不合法的转义字符
    try {
        let str3 = ##""\x1""##
        let jsonValue3 = JsonValue.fromStr(str3)
        println("解析JsonString: ${jsonValue3}")
    } catch (e: JsonException) {
        println("异常信息: ${e.message}")
    }
}

运行结果:

JsonValue 是 JsonString?: false
JsonValue 是 JsonObject?: true
解析后的JsonValue: {"name":"张三","age":25,"student":true}
解析JsonString: "\n"
解析JsonString: "A"
异常信息: the json data is Non-standard, please check:
Parse Error: [Line]: 1, [Pos]: 3, [Error]: Unexpected character: 'x'.

func asArray()

public func asArray(): JsonArray

功能:将 JsonValue 转换为 JsonArray 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"[1, 2, 3, "hello"]"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonArray = jsonValue.asArray()

    println("JsonValue转换为JsonArray: ${jsonArray}")
    println("数组大小: ${jsonArray.size()}")

    // 转换异常示例
    jsonString = ##"123"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonArray = jsonValue.asArray()
    } catch (e: JsonException) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonArray: [1,2,3,"hello"]
数组大小: 4
转换异常: Fail to convert to JsonArray

func asBool()

public func asBool(): JsonBool

功能:将 JsonValue 转换为 JsonBool 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"true"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonBool = jsonValue.asBool()

    println("JsonValue转换为JsonBool: ${jsonBool}")
    println("JsonBool的值: ${jsonBool.getValue()}")

    // 转换异常示例
    jsonString = ##"123"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonBool = jsonValue.asBool()
    } catch (e: Exception) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonBool: true
JsonBool的值: true
转换异常: Fail to convert to JsonBool

func asFloat()

public func asFloat(): JsonFloat

功能:将 JsonValue 转换为 JsonFloat 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"3.14159"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonFloat = jsonValue.asFloat()

    println("JsonValue转换为JsonFloat: ${jsonFloat}")
    println("JsonFloat的值: ${jsonFloat.getValue()}")

    // 转换异常示例
    jsonString = ##"null"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonFloat = jsonValue.asFloat()
    } catch (e: Exception) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonFloat: 3.141590
JsonFloat的值: 3.141590
转换异常: Fail to convert to JsonFloat

func asInt()

public func asInt(): JsonInt

功能:将 JsonValue 转换为 JsonInt 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"42"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonInt = jsonValue.asInt()

    println("JsonValue转换为JsonInt: ${jsonInt}")
    println("JsonInt的值: ${jsonInt.getValue()}")

    // 转换异常示例
    jsonString = ##"123.12"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonInt = jsonValue.asInt()
    } catch (e: Exception) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonInt: 42
JsonInt的值: 42
转换异常: Fail to convert to JsonInt

func asNull()

public func asNull(): JsonNull

功能:将 JsonValue 转换为 JsonNull 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"null"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonNull = jsonValue.asNull()

    println("JsonValue转换为JsonNull: ${jsonNull}")
}

运行结果:

JsonValue转换为JsonNull: null

func asObject()

public func asObject(): JsonObject

功能:将 JsonValue 转换为 JsonObject 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"name": "张三", "age": 25, "student": true}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonObject = jsonValue.asObject()

    println("JsonValue转换为JsonObject: ${jsonObject}")
    println("JsonObject的大小: ${jsonObject.size()}")

    // 转换异常示例
    jsonString = ##"[1, 2, 3, "hello"]"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonObject = jsonValue.asObject()
    } catch (e: Exception) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonObject: {"name":"张三","age":25,"student":true}
JsonObject的大小: 3
转换异常: Fail to convert to JsonObject

func asString()

public func asString(): JsonString

功能:将 JsonValue 转换为 JsonString 格式。

返回值:

异常:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##""Hello, 世界""##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonStr = jsonValue.asString()

    println("JsonValue转换为JsonString: ${jsonStr}")
    println("JsonString的值: ${jsonStr.getValue()}")

    // 转换异常示例
    jsonString = ##"{"name": "张三", "age": 25, "student": true}"##
    jsonValue = JsonValue.fromStr(jsonString)
    try {
        jsonStr = jsonValue.asString()
    } catch (e: Exception) {
        println("转换异常: ${e.message}")
    }
}

运行结果:

JsonValue转换为JsonString: "Hello, 世界"
JsonString的值: Hello, 世界
转换异常: Fail to convert to JsonString

func kind()

public func kind(): JsonKind

功能:返回当前 JsonValue 所属的 JsonKind 类型。

返回值:

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"name": "张三", "age": 25}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var kind = jsonValue.kind()

    // 使用 match 语句处理类型
    match (kind) {
        case JsonKind.JsArray => println("JsonValue的类型是JsArray")
        case JsonKind.JsString => println("JsonValue的类型是JsString")
        case JsonKind.JsInt => println("JsonValue的类型是JsInt")
        case JsonKind.JsObject => println("JsonValue的类型是JsObject")
        case JsonKind.JsFloat => println("JsonValue的类型是JsFloat")
        case JsonKind.JsBool => println("JsonValue的类型是JsBool")
        case JsonKind.JsNull => println("JsonValue的类型是JsNull")
    }
}

运行结果:

JsonValue的类型是JsObject

func toJsonString()

public func toJsonString(): String

功能:将 JsonValue 转换为 JSON 格式的 (带有空格换行符) 字符串。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"name": "张三", "age": 25, "hobbies": ["读书", "游泳"]}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonStr = jsonValue.toJsonString()

    println("JsonValue转换为JSON字符串:\n${jsonStr}")
}

运行结果:

JsonValue转换为JSON字符串:
{
  "name": "张三",
  "age": 25,
  "hobbies": [
    "读书",
    "游泳"
  ]
}

func toJsonStringWithoutEscaping()

public func toJsonStringWithoutEscaping(): String

功能:将 JsonValue 转换为 JSON 格式的 (带有空格换行符) 字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的 JSON 格式字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"description": "Hello & World <测试>"}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var jsonStr = jsonValue.toJsonStringWithoutEscaping()
    var normalJsonStr = jsonValue.toJsonString() // 对比正常方法

    println("不转义HTML特殊字符的JSON字符串:\n${jsonStr}")
    println("正常转义的JSON字符串:\n${normalJsonStr}")
}

运行结果:

不转义HTML特殊字符的JSON字符串:
{
  "description": "Hello & World <测试>"
}
正常转义的JSON字符串:
{
  "description": "Hello \u0026 World <测试>"
}

func toString()

public func toString(): String

功能:将 JsonValue 转换为字符串。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"name": "张三", "age": 25}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var str = jsonValue.toString()

    println("JsonValue转换为字符串: ${str}")
}

运行结果:

JsonValue转换为字符串: {"name":"张三","age":25}

func toStringWithoutEscaping()

public func toStringWithoutEscaping(): String

功能:将 JsonValue 转换为字符串,不对 html 特殊字符 & 转义。

返回值:

  • String - 转换后的字符串。

示例:

import stdx.encoding.json.*

main() {
    var jsonString = ##"{"description": "Hello & World <测试>"}"##
    var jsonValue: JsonValue = JsonValue.fromStr(jsonString)

    var str = jsonValue.toStringWithoutEscaping()
    var normalStr = jsonValue.toString() // 对比正常方法

    println("不转义HTML特殊字符的字符串: ${str}")
    println("正常转义的字符串: ${normalStr}")
}

运行结果:

不转义HTML特殊字符的字符串: {"description":"Hello & World <测试>"}
正常转义的字符串: {"description":"Hello \u0026 World <测试>"}