You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Monkey C(Connect IQ)中遍历嵌套对象并访问数组元素?

Monkey C 访问嵌套JSON结构的解决方案

问题分析

你当前的代码仅能处理顶层的基本类型值,当遇到data这种嵌套的Dictionary(对应JSON的对象)或Array(对应JSON的数组)时,直接打印会输出对象引用而非具体内容。Monkey C完全支持深度访问嵌套的数据结构,只需逐层判断类型并解析即可。

实现思路

  1. 编写递归辅助函数,处理不同类型的变量:对Dictionary和Array进行遍历解析,基本类型直接转换为字符串。
  2. 逐层访问嵌套结构时,先判断当前层级的变量类型(是否为Dictionary/Array),再继续向下访问,避免类型不匹配导致的运行时错误。

修改后的代码

辅助格式化函数

// 递归格式化任意类型的值为可读字符串
function formatValue(value) {
    if (value instanceof Dictionary) {
        var str = "{\n";
        var keys = value.keys();
        for (var i = 0; i < keys.size(); i++) {
            var key = keys[i];
            str += "  " + key + ": " + formatValue(value[key]) + ",\n";
        }
        // 移除最后一个多余的逗号
        if (str.length > 2) {
            str = str.substring(0, str.length - 2) + "\n";
        }
        str += "}";
        return str;
    } else if (value instanceof Array) {
        var str = "[\n";
        for (var i = 0; i < value.size(); i++) {
            str += "  " + formatValue(value[i]) + ",\n";
        }
        if (str.length > 2) {
            str = str.substring(0, str.length - 2) + "\n";
        }
        str += "]";
        return str;
    } else {
        // 基本类型直接转为字符串
        return value.toString();
    }
}

主逻辑代码

if (args instanceof Dictionary) {
    _message = "";
    var keys = args.keys();
    // 遍历顶层所有键值对并格式化
    for (var i = 0; i < keys.size(); i++) {
        var key = keys[i];
        var value = args[key];
        _message += Lang.format("$1$: $2$\n", [key, formatValue(value)]);
    }
    
    // 单独示例:获取第一个设备的deviceName
    if (args.containsKey("data")) {
        var dataDict = args["data"];
        if (dataDict instanceof Dictionary && dataDict.containsKey("devices")) {
            var devicesArray = dataDict["devices"];
            if (devicesArray instanceof Array && devicesArray.size() > 0) {
                var firstDevice = devicesArray[0];
                if (firstDevice instanceof Dictionary && firstDevice.containsKey("deviceName")) {
                    _message += "\n第一个设备名称: " + firstDevice["deviceName"] + "\n";
                }
            }
        }
    }
}

说明

  • 辅助函数formatValue可以递归解析所有嵌套的结构,让data的内容能完整打印出来。
  • 单独获取deviceName的代码块展示了安全访问嵌套结构的方式:每一层都先判断类型和键是否存在,确保代码不会因数据结构异常崩溃。

内容的提问来源于stack exchange,提问作者TimothyLuedtke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:45:31