【仓颉三方库】 数据解析——TOML4CJ

简介

TOML4CJ 旨在成为一个语义明显且易于阅读的最小化配置文件格式。TOML4CJ 被设计成可以无歧义地映射为哈希表。TOML4CJ 应该能很容易地被解析成各种语言中的数据结构。 参考toml语法规约地址: toml.io/cn/

该项目是仓颉语言实现 TOML4CJ v1.0.0 的语言库。

特性

  • 🚀 语义明显易于阅读
  • 🚀 能无歧义地映射为哈希表
  • 💪 易于解析成各种语言中的数据结构
  • 🛠️ 具备实用的原生类型
  • 🌍 受到广泛支持

路线

架构

架构图:

  • 通过 load 入口载入 toml 文件
  • 区分语法使用不同 parser 进行解析
  • 最后生成 DataModel 方便仓颉读取

源码目录:

bash 复制代码
.
├── README.md
├── doc
│   ├── assets
│   ├── cjcov
│   ├── design.md
│   └── feature_api.md
├── res
│   ├── example.toml
│   └── multiline_string.toml
├── src
│   └── decoders 
│       ├── decoder.cj
│       ├── exception.cj
│       ├── symbols.cj
│       ├── toml_tz.cj
│   └── package.cj 
└── test
    ├── HLT
    ├── LLT
    └── UT
  • doc 是库的设计文档、提案、库的使用文档、LLT 覆盖率
  • src 是库源码目录
  • test 是测试用例所在目录,包括 HLT 用例、LLT 用例和 UT 用例

接口说明

目前只实现对整数、浮点数、字符串、布尔类型字面量的解码。详情见API

class Decoder

swift 复制代码
// 初始化 Decoder
public init()
public init(payload: String)

// 解码 toml 文件, pn 为文件路径
public func load(pn: String)

// 实现解码功能
public func decode()

使用说明

编译

复制代码
cjpm build

功能示例

ini 复制代码
key = "value"
bare_key = "value"
bare-key = "value"
1234 = "value"

css 复制代码
import toml4cj.decoders.*

main() {
    let decoder: Decoder = Decoder()
    decoder.load("integer002.toml")
    let a = decoder.decode()
    println(a)
}

运行结果如下:

json 复制代码
{"key":"value","bare_key":"value","bare-key":"value","1234":"value"}

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。

erlang 复制代码
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

TOML4CJ 提供读取 toml 文件数据的功能示例

用例执行需要 toml 文件

kotlin 复制代码
import toml4cj.decoders.*
import std.os.posix.*
main () {
    var path2: String = "${getcwd()}/test.properties"
    let decoder: Decoder = Decoder()
    try {
        decoder.load(path2)
    } catch (e: IllegalArgumentException) {
        if (e.toString() == "IllegalArgumentException: The format of the file is not supported.") {
            return 0
        }
        return 1
    }
    let a = decoder.decode()
    println(a)
    return 1
}

运行结果如下:

kotlin 复制代码
return 1

TOML4CJ 提供解析 toml 文件数据的功能示例

(备注: 参考toml语法规约地址: toml.io/cn/ ) 用例执行需要toml文件

javascript 复制代码
import toml4cj.decoders.*
import std.os.posix.*
let a = ##"{"int1":"+99","int2":"42","int3":"0","int4":"-17"}"##
let b = ##"{"int5":"1_000","int6":"5_349_221","int7":"53_49_221","int8":"1_2_3_4_5"}"##
main() {
    var path2: String = getcwd()
    let decoder: Decoder = Decoder()
    decoder.load("${path2}/integer001.toml")
    var json = decoder.decode()
    if (json.toString() != a) {
        return 1
    }
    decoder.load("${path2}/integer002.toml")
    json = decoder.decode()
    if (json.toString() != b) {
        return 2
    }
    return 0
}

运行结果如下:

json 复制代码
{"key":"value","bare_key":"value","bare-key":"value","1234":"value"}

约束与限制

在下述版本验证通过:

yaml 复制代码
Cangjie Version: 0.53.4
相关推荐
Quarkn3 小时前
鸿蒙原生应用ArkUI之自定义List下拉刷新动效
list·harmonyos·arkts·鸿蒙·arkui
AlbertZein4 小时前
HarmonyOS5 凭什么学鸿蒙 —— Context详解
harmonyos
whysqwhw12 小时前
鸿蒙音频播放方式总结
harmonyos
whysqwhw12 小时前
鸿蒙音频录制方式总结
harmonyos
zhanshuo14 小时前
HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
harmonyos
zhanshuo14 小时前
鸿蒙任务调度机制深度解析:优先级、时间片、多核与分布式的流畅秘密
harmonyos
小小小小小星20 小时前
ArkUI 5.0 核心特性与实战案例
harmonyos
奶糖不太甜1 天前
鸿蒙多端开发:如何一次编写适配手机、手表、电视?
harmonyos
whysqwhw1 天前
鸿蒙多线程
harmonyos
zhanshuo2 天前
鸿蒙文件系统全攻略:从设计原理到跨设备实战,带你玩转本地与分布式存储
harmonyos