君安光电科技
发表于 2025-3-6 20:58:30
qq812913329 发表于 2025-3-6 10:01
老吴做不出,做出了你们也承受不住api的成本。用cursor吧,
DeepSeek成本非常低的啊?
a759077146
发表于 2025-3-6 21:13:53
牛逼
qwyan
发表于 2025-3-7 05:20:56
强烈支持楼主出一个使用cursor写火山视窗代码的方法,希望楼主能整理一个详细一些的,非常感谢。或者看看能不能分享一下楼主用的提示词,也非常感谢
amwji
发表于 2025-3-7 09:22:21
楼主大义分享
qq812913329
发表于 2025-3-7 18:05:36
qwyan 发表于 2025-3-7 05:20
强烈支持楼主出一个使用cursor写火山视窗代码的方法,希望楼主能整理一个详细一些的,非常感谢。或者看看能 ...
---
description: 火山json规则
globs:
alwaysApply: false
---
如果当前规则被启用,请开开头回复,火山规则已经被启用
# 火山程序语言编写规则
严格遵守火山语法
## **重要格式规则**
### **类成员排序规则(非常重要)**
**火山语言对类成员的声明顺序有严格要求,必须按照以下顺序排列:**
1. **首先声明所有变量**
2. **然后声明所有事件处理方法**(带有`接收事件`标记的方法)
3. **最后声明所有普通方法**
**不遵循这个顺序会导致编译错误,如"无效的成员位置"。**
**错误示例:**
```
类 错误示例类 {
变量 变量1 <类型 = 整数>
// 错误:普通方法放在了事件处理方法之前
方法 普通方法 <类型 = 整数>
{
返回 (0)
}
方法 事件处理方法 <接收事件>
参数 参数1 <类型 = 整数>
{
返回 (0)
}
}
```
**正确示例:**
```
类 正确示例类 {
变量 变量1 <类型 = 整数>
方法 事件处理方法 <接收事件>
参数 参数1 <类型 = 整数>
{
返回 (0)
}
方法 普通方法 <类型 = 整数>
{
返回 (0)
}
}
```
## 参考文档路径
- 库文件:`docs2\huoshan\j_json.wsv`
- 示例文件:`docs2\huoshan\蓝牙操作模块.wsv`
# 火山JSON代码生成执行规则文档
## 一、火山语言基础语法
### 1. 程序结构
- **文件头**:每个火山程序必须以 `<火山程序 类型 = "通常" 版本 = 1 />` 开始
- **包声明**:使用 `包 "包名"` 进行包声明
- **代码组织**:代码主要通过类、方法和变量组织
### 2. 变量声明规则
- **语法格式**:`变量 变量名 <类型 = 类型名 [属性列表]>`
- **常见属性**:
- `公开` - 表示变量可公开访问
- `类型` - 指定变量类型
- `值` - 指定初始值
- `注释` - 添加变量注释
- `折叠` - 在IDE中可折叠显示
- **基本类型**:
- `整数` - 整数类型
- `小数` - 浮点数类型
- `文本型` - 字符串类型
- `逻辑型` - 布尔类型
- `对象类` - 通用对象类型
### 3. 方法定义规则
- **语法格式**:`方法 方法名 <[访问修饰符] [类型 = 返回类型] [属性列表]>`
- **参数定义**:`参数 参数名 <类型 = 类型名 [属性列表]>`
- **参数默认值**:使用 `@默认值 = 值` 指定
- **返回语句**:使用 `返回 (值)` 返回值
### 4. 控制结构
- **条件语句**:
```
如果 (条件) {
// 代码块
} 否则 (条件) {
// 代码块
} 否则 {
// 代码块
}
```
- **循环语句**:
```
循环 (初始值, 结束值, 变量) {
// 代码块
}
```
- **条件循环**:
```
判断循环 (条件) {
// 代码块
}
```
- **异常处理**:
```
开始俘获异常 () {
// 可能抛出异常的代码
} 俘获所有异常 () {
// 异常处理代码
}
```
## 二、JSON对象操作详解
### 1. JSON对象类
#### 创建JSON对象
```
// 创建空JSON对象
变量 json对象 <类型 = JSON对象类>
json对象 = 新建对象 (JSON对象类)
// 从文本创建JSON对象
变量 json对象 <类型 = JSON对象类>
json对象 = JSON对象类.创建自文本数据 (JSON文本)
```
#### 添加键值对
```
// 添加不同类型的值
json对象.置入文本值 ("键名", "文本值")
json对象.置入整数值 ("键名", 123)
json对象.置入小数值 ("键名", 123.45)
json对象.置入逻辑值 ("键名", 真)
json对象.置入长整数值 ("键名", 长整数值)
json对象.置入对象值 ("键名", 子对象)
```
#### 读取值
```
// 读取不同类型的值
变量 文本值 <类型 = 文本型>
文本值 = json对象.取文本值 ("键名", "默认值")
变量 整数值 <类型 = 整数>
整数值 = json对象.取整数值 ("键名", 0)
变量 子对象 <类型 = JSON对象类>
子对象 = json对象.取对象值 ("键名")
```
#### 转换为文本
```
// 转换为格式化的JSON文本
变量 json文本 <类型 = 文本型>
json文本 = json对象.到可读文本 (2)// 2是缩进空格数
```
### 2. JSON数组类
#### 创建JSON数组
```
// 创建空JSON数组
变量 json数组 <类型 = JSON数组类>
json数组 = 新建对象 (JSON数组类)
// 从文本创建JSON数组
变量 json数组 <类型 = JSON数组类>
json数组 = JSON数组类.创建自文本数据 (JSON文本)
```
#### 添加元素
```
// 添加不同类型的值
json数组.置入文本值 ("文本值")
json数组.置入整数值 (123)
json数组.置入对象值 (子对象)
// 在指定位置添加值
json数组.置入文本值到指定位置 (0, "文本值")
```
#### 读取元素
```
// 读取不同类型的值
变量 文本值 <类型 = 文本型>
文本值 = json数组.取文本值 (0, "默认值")
变量 子对象 <类型 = JSON对象类>
子对象 = json数组.取对象值 (0)
```
## 三、复杂JSON结构构建
### 1. 嵌套对象构建
```
// 主对象
变量 json主对象 <类型 = JSON对象类>
json主对象 = 新建对象 (JSON对象类)
// 子对象
变量 json子对象 <类型 = JSON对象类>
json子对象 = 新建对象 (JSON对象类)
json子对象.置入文本值 ("名称", "子对象名称")
json子对象.置入整数值 ("值", 100)
// 将子对象添加到主对象
json主对象.置入对象值 ("子对象", json子对象)
```
### 2. 对象数组构建
```
// 主对象
变量 json主对象 <类型 = JSON对象类>
json主对象 = 新建对象 (JSON对象类)
// 数组
变量 json数组 <类型 = JSON数组类>
json数组 = 新建对象 (JSON数组类)
// 添加元素到数组
变量 i <类型 = 整数>
循环 (0, 5, i) {
变量 元素 <类型 = JSON对象类>
元素 = 新建对象 (JSON对象类)
元素.置入文本值 ("名称", "元素" + 到文本 (i))
元素.置入整数值 ("索引", i)
json数组.置入对象值 (元素)
}
// 将数组添加到主对象
json主对象.置入对象值 ("列表", json数组)
```
## 四、网络通信中的JSON
### 1. 构建请求JSON
```
// 创建请求对象
变量 请求对象 <类型 = JSON对象类>
请求对象 = 新建对象 (JSON对象类)
// 添加基本信息
请求对象.置入文本值 ("type", "请求类型")
请求对象.置入文本值 ("device_id", 设备ID)
请求对象.置入长整数值 ("timestamp", 日期时间类_.取现行时间戳2_(,))
// 添加参数对象
变量 参数对象 <类型 = JSON对象类>
参数对象 = 新建对象 (JSON对象类)
参数对象.置入文本值 ("key", "value")
参数对象.置入整数值 ("number", 123)
// 组装请求
请求对象.置入对象值 ("params", 参数对象)
```
### 2. 解析响应JSON
```
// 获取响应文本
变量 响应文本 <类型 = 文本型>
响应文本 = 对象到文本 (网络响应1.取响应内容 ())
// 解析响应
变量 响应对象 <类型 = JSON对象类>
响应对象 = JSON对象类.创建自文本数据 (响应文本)
// 安全提取数据
开始俘获异常 () {
变量 状态码 <类型 = 整数>
状态码 = 响应对象.取整数值 ("status", 0)
变量 数据对象 <类型 = JSON对象类>
数据对象 = 响应对象.取对象值 ("data")
如果 (数据对象 != 空对象) {
// 处理数据
}
} 俘获所有异常 () {
// 处理异常
}
```
## 五、常见错误及避免方法
### 1. 空对象检查
```
// 正确的空对象检查
如果 (json对象 != 空对象) {
// 操作json对象
}
// 检查获取的子对象
变量 子对象 <类型 = JSON对象类>
子对象 = json对象.取对象值 ("键名")
如果 (子对象 != 空对象) {
// 操作子对象
}
```
### 2. 异常处理
```
// 使用异常处理保护JSON操作
开始俘获异常 () {
// JSON操作代码
变量 值 <类型 = 文本型>
值 = json对象.取文本值2 ("键名")
} 俘获所有异常 () {
// 异常处理代码
}
```
### 3. 类型转换检查
```
// 在类型转换前检查
变量 可能的整数 <类型 = 文本型>
可能的整数 = json对象.取文本值 ("数字字段", "0")
变量 整数值 <类型 = 整数>
如果 (是否为数字 (可能的整数)) {
整数值 = 到整数 (可能的整数)
} 否则 {
整数值 = 0
}
```
### 4. 变量命名冲突
火山语言中,类的成员变量和方法参数不能使用相同的名称,否则会导致编译错误。
**错误示例:**
```
类 示例类 {
变量 姓名 <类型 = 文本型>
方法 设置信息 <公开>
参数 姓名 <类型 = 文本型>// 错误:与类成员变量同名
{
// 方法体
}
}
```
**正确示例:**
```
类 示例类 {
变量 姓名 <类型 = 文本型>
方法 设置信息 <公开>
参数 姓名参数 <类型 = 文本型>// 正确:使用不同的名称
{
姓名 = 姓名参数// 将参数值赋给成员变量
}
}
```
当需要在类中使用成员变量和同名参数时,推荐的命名规范:
- 为参数名添加"参数"后缀
- 为成员变量添加"成员"或"_"前缀
- 使用更具描述性的命名区分参数和成员变量
### 5. JSON数组操作错误
#### 5.1 正确添加元素到JSON数组
在火山语言中,向JSON数组添加元素有多种方法,必须使用正确的方法以避免结构错误。
**正确示例**:
```
// 创建数组
变量 数组 <类型 = JSON数组类>
数组 = 新建对象 (JSON数组类)
// 添加简单值到数组
数组.置入文本值 ("文本元素")// 添加文本
数组.置入整数值 (123) // 添加整数
数组.置入逻辑值 (真) // 添加布尔值
// 添加对象到数组
变量 对象元素 <类型 = JSON对象类>
对象元素 = 新建对象 (JSON对象类)
对象元素.置入文本值 ("name", "张三")
数组.置入对象值 (对象元素) // 正确:使用置入对象值方法
```
**错误示例**:
```
// 错误:不能直接使用置入文本值等方法添加带键名的元素
数组.置入文本值 ("name", "张三")// 错误:数组元素没有键名
// 错误:忘记创建新对象
变量 对象元素 <类型 = JSON对象类>
数组.置入对象值 (对象元素)// 错误:未初始化的对象
```
#### 5.2 处理多层嵌套的数组和对象
处理复杂的嵌套结构时,需要特别注意层次关系和对象引用。
**正确示例**:
```
// 创建包含对象数组的对象
变量 主对象 <类型 = JSON对象类>
主对象 = 新建对象 (JSON对象类)
// 创建数组
变量 用户列表 <类型 = JSON数组类>
用户列表 = 新建对象 (JSON数组类)
// 创建数组元素1
变量 用户1 <类型 = JSON对象类>
用户1 = 新建对象 (JSON对象类)
用户1.置入文本值 ("name", "张三")
// 创建嵌套对象
变量 联系方式1 <类型 = JSON对象类>
联系方式1 = 新建对象 (JSON对象类)
联系方式1.置入文本值 ("email", "zhangsan@example.com")
// 将嵌套对象添加到元素中
用户1.置入对象值 ("contact", 联系方式1)
// 将元素添加到数组
用户列表.置入对象值 (用户1)
// 创建数组元素2(重复类似步骤)
变量 用户2 <类型 = JSON对象类>
用户2 = 新建对象 (JSON对象类)
用户2.置入文本值 ("name", "李四")
变量 联系方式2 <类型 = JSON对象类>
联系方式2 = 新建对象 (JSON对象类)
联系方式2.置入文本值 ("email", "lisi@example.com")
用户2.置入对象值 ("contact", 联系方式2)
用户列表.置入对象值 (用户2)
// 将数组添加到主对象
主对象.置入对象值 ("users", 用户列表)
```
#### 5.3 JSON结构完整性检查
在生成复杂JSON结构时,应当注意以下几点以确保结构完整性:
1. **确保开始和结束括号匹配**:
- 对象使用 `{}`
- 数组使用 `[]`
2. **检查父子关系**:
- 确保每个子对象都被正确添加到其父对象中
- 使用正确的方法添加元素(如 `置入对象值`、`置入文本值` 等)
3. **完整性测试**:
- 生成JSON后,检查生成的结果是否符合预期结构
- 可以使用调试输出检查生成的JSON文本
**完整性检查示例**:
```
// 生成完成后,检查结果
变量 结果 <类型 = 文本型>
结果 = 主对象.到可读文本 (2)
调试输出 (结果)// 检查生成的JSON是否符合预期
```
## 六、实战模式
### 1. WebSocket通信模式
```
// 构建WebSocket消息
变量 消息对象 <类型 = JSON对象类>
消息对象 = 新建对象 (JSON对象类)
消息对象.置入文本值 ("类型", "app")
变量 数据对象 <类型 = JSON对象类>
数据对象 = 新建对象 (JSON对象类)
数据对象.置入文本值 ("type", "操作类型")
数据对象.置入文本值 ("device_id", 设备ID)
// 添加数据对象到消息
消息对象.置入对象值 ("数据", 数据对象)
// 发送消息
websocket客户端.发送文本 (消息对象.到可读文本 (0))
```
### 2. 配置读写模式
```
// 读取配置
变量 配置文本 <类型 = 文本型>
配置文本 = 文件读入文本 ("配置路径")
变量 配置对象 <类型 = JSON对象类>
配置对象 = JSON对象类.创建自文本数据 (配置文本)
// 修改配置
配置对象.置入文本值 ("新设置", "新值")
// 保存配置
文件写出文本 ("配置路径", 配置对象.到可读文本 (2))
```
## 七、代码示例
### 完整的JSON操作示例
```
// 创建一个复杂的JSON对象
变量 配置 <类型 = JSON对象类>
配置 = 新建对象 (JSON对象类)
// 添加基本属性
配置.置入文本值 ("名称", "配置名称")
配置.置入整数值 ("版本", 1)
配置.置入逻辑值 ("启用", 真)
// 添加子对象
变量 用户信息 <类型 = JSON对象类>
用户信息 = 新建对象 (JSON对象类)
用户信息.置入文本值 ("用户名", "张三")
用户信息.置入整数值 ("年龄", 30)
配置.置入对象值 ("用户", 用户信息)
// 添加数组
变量 模块列表 <类型 = JSON数组类>
模块列表 = 新建对象 (JSON数组类)
模块列表.置入文本值 ("模块1")
模块列表.置入文本值 ("模块2")
模块列表.置入文本值 ("模块3")
配置.置入对象值 ("模块", 模块列表)
// 转换为文本并输出
变量 配置文本 <类型 = 文本型>
配置文本 = 配置.到可读文本 (2)
调试输出 (配置文本)
```
遵循以上规则和示例,可以确保AI能够准确无误地生成火山JSON代码,避免常见错误和陷阱。
qq812913329
发表于 2025-3-7 18:13:51
qwyan 发表于 2025-3-7 05:20
强烈支持楼主出一个使用cursor写火山视窗代码的方法,希望楼主能整理一个详细一些的,非常感谢。或者看看能 ...
原理在我历史题,火山安卓,视窗,go,h5都可以写。我过一两个月才有空完善。效果反正你们是看到了吧 json库只是我调教了几分钟就有这效果
qwyan
发表于 2025-3-7 21:22:59
qq812913329 发表于 2025-3-7 18:13
原理在我历史题,火山安卓,视窗,go,h5都可以写。我过一两个月才有空完善。效果反正你们是看到了吧 jso ...
就是把火山的类库全部复制成文本保存到文本文档,然后让它先学习文本文档的方法,然后再提问吗
qq812913329
发表于 2025-3-7 21:43:06
qwyan 发表于 2025-3-7 21:22
就是把火山的类库全部复制成文本保存到文本文档,然后让它先学习文本文档的方法,然后再提问吗 ...
en
qwyan
发表于 2025-3-8 03:12:10
qq812913329 发表于 2025-3-7 21:43
en
我昨天看了你的帖子后,把火山的基本类复制成文本后,发给它先学习,然后让它封装一个简单判断指定文件是否存在,存在则创建一个txt文本文档,不存在则调试输出不存在,但是它好像会用到嵌入式,没有就使用基本类中的方法来实现封装那个功能,请问可以分享一下你给它的提示词吗
qq812913329
发表于 2025-3-8 03:50:49
qwyan 发表于 2025-3-8 03:12
我昨天看了你的帖子后,把火山的基本类复制成文本后,发给它先学习,然后让它封装一个简单判断指定文件是 ...
通过网盘分享的文件:h1.mdc
链接: https://pan.baidu.com/s/15A9DPySrqSzyO9P68lm-Yg?pwd=nw3r 提取码: nw3r
--来自百度网盘超级会员v7的分享