#json #json-parser #reading #serialization #common #vec

json-commons

Rust 中的一组 JSON 常用工具

4 个版本 (2 个重大更改)

0.3.0 2022 年 9 月 19 日
0.2.0 2022 年 9 月 8 日
0.1.3 2022 年 9 月 7 日

#1315 in 编码

Apache-2.0

15KB
142

json-commons

Rust 中的一组 JSON 常用工具。

免责声明

此包仅为 jsonbson 包的包装器。

功能

  • read_str

    • 从字符串返回一个 json::JsonValue
  • read_file

    • 从文件返回一个 json::JsonValue
  • path_exists

    • 如果点路径存在则返回一个 bool
  • get_path

    • 返回一个 Option<json::JsonValue>
  • parse_to_vec

    • 将一个 json::JsonValue 数组作为 Vec<json::JsonValue> 返回
  • serialize

    • 返回一个 JSON 字符串,类似于 JavaScript 的 "JSON.stringify"
  • serialize_to_bson_hex

    • 返回一个代表 BSON 的十六进制字符串
  • json_from_bson_hex

    • 从一个十六进制字符串返回一个 json::JsonValue
  • parse_to_document

    • 从一个 json::JsonValue 返回一个 bson::Document
  • json_from_document

    • 从一个 bson::Document 返回一个 json::JsonValue
  • parse_to_bson

    • 从一个 json::JsonValue 返回一个 bson::Bson
  • json_from_bson

    • 从一个 bson::Bson 返回一个 json::JsonValue

用法

use json_commons::JsonCommons;


fn main() {
    let jsonc = JsonCommons::new();
}

解析功能

解析功能允许读取JSON内容,但失败时会发生恐慌错误

读取JSON字符串

let content = "{\"car\": {\"model\": \"Gurgel Itaipu E400\", \"color\": \"red\"}}";
let json = jsonc.read_str(content);

读取JSON文件

let path = "/user/docs/myfile.json";
let json = jsonc.read_file(path);

点路径功能

以下示例使用此JSON内容

{
  "car": {
    "model": "Gurgel Itaipu E400",
    "color": "red"
  }
}

路径存在

您可以检查路径是否存在

let json = jsonc.read_str(content);

jsonc.path_exists("car", json); // The output is True
jsonc.path_exists("car.model", json); // The output is True

jsonc.path_exists("car.name", json); // The output is False
jsonc.path_exists("person", json); // The output is False

获取路径

您可以获取任何路径作为可选项

let json = jsonc.read_str(content);

jsonc.get_path("car", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.model", json); // The output is Ok, containing a JsonValue

jsonc.get_path("car.name", json); // The output is None
jsonc.get_path("person", json); // The output is None

点路径与列表

您可以通过索引访问来获取子元素,请参见此示例

{
  "car": {
  	"model": "Gurgel Itaipu E400",
  	"variants": [
      		{
      			"fuel": "gasoline",
      			"color": "yellow"
      		},
      		{
      			"fuel": "eletric",
      			"color": "red"
      		}
      	]
    }
}
let json = jsonc.read_str(content);

jsonc.get_path("car.variants", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.variants.0", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.variants.1.fuel", json); // The output is Ok, containing a JsonValue

jsonc.get_path("car.variants.99.fuel", json); // The output is None
jsonc.get_path("car.variants.one", json); // The output is None

列表功能

考虑以下内容

{
  "cars": [
    {
      "model": "Gurgel Itaipu E400",
      "color": "red"
    },
    {
      "model": "Gurgel X15",
      "color": "brown"
    }
  ]
}

解析到Vec

您可以解析列表到vec


let json = jsonc.read_str(content);

let cars = jsonc.get_path("cars", json).unwrap();
jsonc.parse_to_vec(cars); // The output is a vec of JsonValue, with len 2


序列化功能

序列化

此功能与JavaScript JSON.stringify 相当

考虑以下内容

{
  "car": {
    "model": "Gurgel Itaipu E4000",
    "color": "red"
  }
}

使用序列化输出为

let serialized = jsonc.serialize(myjson);
assert_eq!("{\"car\":{\"model\":\"Gurgel Itaipu E400\",\"color\":\"red\"}}", serialized);

序列化到BSON十六进制

let bson_hex = jsonc.serialize_to_bson_hex(myjson);
assert_eq!("3c000000036361720032000000026d6f64656c001300000047757267656c2049746169707520453430300002636f6c6f720004000000726564000000", bson_hex)

您可以使用此工具检查BSON十六进制


解析器功能

  • json_from_bson_hex
    • 从一个十六进制字符串返回一个 json::JsonValue
  • parse_to_document
    • 从一个 json::JsonValue 返回一个 bson::Document
  • json_from_document
    • 从一个 bson::Document 返回一个 json::JsonValue
  • parse_to_bson
    • 从一个 json::JsonValue 返回一个 bson::Bson
  • json_from_bson
    • 从一个 bson::Bson 返回一个 json::JsonValue

依赖关系

~6.5MB
~127K SLoC