Lumesh Parse 模块

wiki libs

Lumesh 解析函数使用文档


函数概览

函数组 函数名 调用格式 功能描述
数据解析 json parse.json json_str 解析JSON字符串为Lumesh数据结构
数据解析 toml parse.toml toml_str 解析TOML字符串为Lumesh数据结构
数据解析 csv parse.csv csv_str 解析CSV字符串为Lumesh数据结构
代码解析 expr parse.expr lumesh_code 解析Lumesh代码字符串为可执行表达式
命令解析 cmd parse.cmd [headers...] output 将命令行输出解析为结构化数据
数据序列化 to_json parse.to_json expr 序列化Lumesh数据结构为JSON字符串
数据序列化 to_toml parse.to_toml expr 序列化Lumesh数据结构为TOML字符串
数据序列化 to_csv parse.to_csv expr 序列化Lumesh数据结构为CSV字符串
json查询 jq parse.jq json_str 常用json查询,支持管道,属性,索引,select

详细说明与示例

1. parse.toml

参数

  • toml_str:字符串类型,包含有效的TOML内容

输出示例

parse.toml "name = 'Alice'\nage = 30"

# 返回:
+---------------------+
| KEY VALUE |
+=====================+
| name "Alice" |
| age 30 |
+---------------------+

已经转为表达式的,可以使用parse.to_toml转回为字符串。


2. parse.json

参数

  • json_str:字符串类型,包含有效的JSON内容

嵌套结构输出

parse.json '{"name":"Alice","hobbies":["reading","swimming"]}'
# or
parse.json "{\"name\":\"Alice\",\"hobbies\":[\"reading\",\"swimming\"]}"

# 返回:
+---------------------------------+
| KEY VALUE |
+=================================+
| age 30 |
| hobbies ┌─────────┬──────────┐ |
| │ reading │ swimming │ |
| └─────────┴──────────┘ |
| name "Alice" |
+---------------------------------+

已经转为表达式的,可以使用parse.to_json转回为字符串。


3. parse.csv

参数

  • csv_str:字符串类型,包含有效的CSV内容

嵌套结构输出

parse.csv "Product Name,Category,Price,Stock
Laptop,Electronics,999.99,50
Smartphone,Electronics,499.99,150
Desk Chair,Furniture,89.99,75
Coffee Maker,Appliances,29.99,200
Notebook,Stationery,2.99,500
"

# 输出
+------------------------------------------+
| CATEGORY PRICE PRODUCT NAME STOCK |
+==========================================+
| Electronics 999.99 Laptop 50 |
| Electronics 499.99 Smartphone 150 |
| Furniture 89.99 Desk Chair 75 |
| Appliances 29.99 Coffee Maker 200 |
| Stationery 2.99 Notebook 500 |
+------------------------------------------+

已经转为表达式的,可以使用parse.to_csv转回为字符串。


4. parse.expr

参数

  • lumesh_code:字符串类型,包含有效的Lumesh语法

动态代码执行

let code = "x -> math.max(x, 5)"
let action = parse.expr(code)
action(2) #=> 5

5. parse.cmd

参数模式

模式 示例 说明
自动检测 parse.cmd output 智能识别表头和数据行
列表表头 parse.cmd [h1, h2] output 指定表头列表
多参数 parse.cmd h1 h2 ... output 直接指定多个表头

表格输出示例

parse.cmd(["ID", "NAME", "AGE"], "1 Alice 30\n2 Bob 25")

# 返回:
+------------------------------+
| ID NAME AGE |
+==============================+
| 1 "Alice" 30 |
| 2 "Bob" 25 |
+------------------------------+

复杂结构输出

parse.cmd "ITEM  QTY  PRICE
Apple 10 2.5
Banana 5 1.8"

# 返回:
+---------------------------------+
| ITEM QTY PRICE |
+=================================+
| Apple 10 2.5 |
| Banana 5 1.8 |
+---------------------------------+

5. parse.jq

参数

  • query_str:字符串类型,包含有效的JSON查询,支持管道,属性,索引,select
    管道符:|
    属性访问: .name
    通配符:.[] 返回整个数组
    select语句支持基本比较操作符:>, <, >=, <=, ==, !=
  • json_str:字符串类型,包含有效的JSON内容
let a = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'

parse.jq '[0]|.name' a # 输出:"Alice"
parse.jq 'select(.age>28)' a # 输出:[{"name":"Alice","age":30}]

特殊场景处理

预结构化数据识别

parse.cmd "1, 2, 3"
# 直接返回列表:
+-------------+
| C0 C1 C2 |
+=============+
| 1, 2, 3 |
+-------------+

表头自动转换

parse.cmd "CPU%  MEM(MB) MAJ:MIN\n50    1024   259:0"
# 表头转换后:
+-----------------------+
| CPU% MAJ_MIN MEM_MB |
+=======================+
| 50 259:0 1024 |
+-----------------------+

空输入处理

parse.toml ""   ; => none
parse.cmd "" ; => [] (空列表)

# 输出:
+------------+
| KEY VALUE |
+============+
+------------+

最佳实践

  1. parse.cmd一般用于将系统命令的结果从字符串转为结构化表格。
ps aux | head -n4 | parse.cmd()

# 输出:
+-------------------------------------------------------------------------------------+
| %CPU %MEM COMMAND PID RSS START STAT TIME TTY USER VSZ |
+=====================================================================================+
| 0.0 0.0 /sbin/init 1 1932 09:05 S 0:00 ? root 2608 |
| 0.0 0.0 [kthreadd] 2 0 09:05 S 0:00 ? root 0 |
| 0.0 0.0 [pool_workqueue_release] 3 0 09:05 S 0:00 ? root 0 |
+-------------------------------------------------------------------------------------+

  1. parse.cmd往往结合whereselect语句使用。
ps aux | parse.cmd() | where(COMMAND ~: "lume") | select "%CPU" COMMAND RSS

# 输出:
+----------------------------------+
| %CPU COMMAND RSS |
+==================================+
| 0.0 ./target/debug/lume 10476 |
| 0.0 ./target/debug/lume 12148 |
+----------------------------------+
  1. lumesh 自带的模块命令无须parse.cmd转换,可以直接使用whereselect
fs.ls -l -k | where(size > 8)

# 输出
+---------------------------------------------------------------+
| MODE MODIFIED NAME SIZE TYPE |
+===============================================================+
| 420 2025-06-01 06:12:18.911115732 Cargo.lock 47 file |
| 420 2025-05-30 10:26:40.122231239 CHANGELOG.md 10 file |
+---------------------------------------------------------------+