hamibot 如何读取网址的Jason数据,有例子吗

测试脚本 · 6 天前
第 1 条补充
·
6 天前

http://www/abc.com/news.jason 的内容是这样的:
{
"data": {
"title": "系统维护通知",
"content": "2月20日0-2点系统维护,暂不可用",
"publishTime": "2026-02-19"
}
}

那代码如何写?

回答

Hamibot AI
1
· 6 天前

在Hamibot中,你可以使用内置的http模块来读取网址的JSON数据。以下是一个完整的示例:

// 文档地址 https://docs.hamibot.com/

// 发起HTTP GET请求
var res = http.get('https://api.example.com/data');

// 检查请求是否成功
if (res.statusCode === 200) {
    // 将响应体解析为JSON对象
    var jsonData = res.body.json();
    
    // 现在可以访问JSON数据了
    log('获取到的JSON数据:');
    log(JSON.stringify(jsonData, null, 2));
    
    // 访问具体的字段
    if (jsonData.someField) {
        log('someField的值: ' + jsonData.someField);
    }
    
    // 如果是数组
    if (Array.isArray(jsonData)) {
        log('数据是数组,长度: ' + jsonData.length);
        for (var i = 0; i < jsonData.length; i++) {
            log('第' + (i + 1) + '项: ' + JSON.stringify(jsonData[i]));
        }
    }
} else {
    log('请求失败,状态码: ' + res.statusCode);
    log('响应内容: ' + res.body.string());
}

如果你需要设置请求头(例如需要认证或指定内容类型),可以使用更通用的http.request()方法:

// 文档地址 https://docs.hamibot.com/

var res = http.request('https://api.example.com/data', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer your_token_here'
    }
});

if (res.statusCode === 200) {
    var jsonData = res.body.json();
    // 处理JSON数据...
} else {
    log('请求失败: ' + res.statusCode);
}

重要提示:

  1. 确保你的设备已连接到互联网
  2. 如果API需要认证,记得在请求头中添加相应的认证信息
  3. 处理网络请求时最好添加异常处理,因为网络连接可能不稳定
  4. 对于需要POST请求的情况,你可以使用http.post()方法或http.request()方法

如果需要处理更复杂的API交互,可以参考Hamibot API文档中的相关示例。


补充回答 1

根据你提供的JSON数据结构,读取该网址的JSON数据可以这样写:

// 文档地址 https://docs.hamibot.com/

// 发起HTTP GET请求
var res = http.get('http://www.abc.com/news.jason');

// 检查请求是否成功
if (res.statusCode === 200) {
    try {
        // 将响应体解析为JSON对象
        var jsonData = res.body.json();
        
        // 访问具体的字段
        var title = jsonData.data.title;
        var content = jsonData.data.content;
        var publishTime = jsonData.data.publishTime;
        
        // 输出获取到的数据
        log('=== 新闻数据 ===');
        log('标题: ' + title);
        log('内容: ' + content);
        log('发布时间: ' + publishTime);
        
        // 可以根据需要进行进一步处理
        // 例如:检查是否需要显示通知
        var currentDate = new Date();
        var publishDate = new Date(publishTime);
        
        // 如果是今天发布的消息
        if (currentDate.toDateString() === publishDate.toDateString()) {
            log('这是一条今天发布的消息');
        }
        
        // 检查内容中是否包含特定关键词
        if (content.indexOf('系统维护') !== -1) {
            log('注意:这条消息涉及系统维护');
        }
        
    } catch (e) {
        log('JSON解析失败: ' + e.toString());
        log('原始响应内容: ' + res.body.string());
    }
} else {
    log('请求失败,状态码: ' + res.statusCode);
    log('错误信息: ' + res.body.string());
}

如果你想要更健壮的代码,可以添加更多错误检查:

// 文档地址 https://docs.hamibot.com/

var url = 'http://www.abc.com/news.jason';
log('正在请求: ' + url);

var res = http.get(url);

if (res && res.statusCode === 200) {
    var responseText = res.body.string();
    
    if (responseText) {
        try {
            var jsonData = JSON.parse(responseText);
            
            // 检查数据结构是否符合预期
            if (jsonData && jsonData.data) {
                var data = jsonData.data;
                
                // 确保字段存在
                var title = data.title || '无标题';
                var content = data.content || '无内容';
                var publishTime = data.publishTime || '未知时间';
                
                log('成功获取新闻数据:');
                log('标题: ' + title);
                log('内容: ' + content);
                log('发布时间: ' + publishTime);
                
                // 返回数据供后续使用
                var newsInfo = {
                    title: title,
                    content: content,
                    publishTime: publishTime,
                    rawData: jsonData
                };
                
                return newsInfo;
            } else {
                log('返回的数据结构不符合预期');
                log('完整响应: ' + responseText);
            }
        } catch (e) {
            log('JSON解析错误: ' + e.message);
            log('响应内容: ' + responseText);
        }
    } else {
        log('响应内容为空');
    }
} else {
    var errorMsg = '请求失败';
    if (res) {
        errorMsg += ',状态码: ' + res.statusCode;
        if (res.body) {
            errorMsg += ',错误信息: ' + res.body.string();
        }
    }
    log(errorMsg);
}

注意:

  1. 你提供的URL是http://www/abc.com/news.jason,这看起来可能是笔误,应该是http://www.abc.com/news.jason(注意点号)
  2. 文件扩展名.jason不太常见,通常是.json,但代码可以正常处理
  3. 代码中使用了.indexOf()而不是.includes(),以确保兼容Rhino 1.7.15引擎
  4. 建议在实际使用前先测试URL是否能正常访问
ℹ️ 本回答由 AI 生成,内容仅供参考