yml配置的json,如何被string识别呢?

已知数据格式

{
    "description": "音响设备音量调节指令",
    "field_specifications": {
      "root_level": {
        "type": {
          "data_type": "string",
          "required": true,
          "description": "指令类型标识,固定为'iot'",
          "allowed_values": ["iot"]
        }
      },
      "command_level": {
        "name": {
          "data_type": "string",
          "required": true,
          "description": "目标设备名称",
          "allowed_values": ["Speaker"],
          "device_mapping": {
            "Speaker": "音响设备"
          }
        },
        "method": {
          "data_type": "string",
          "required": true,
          "description": "音量设置方法",
          "allowed_values": ["SetVolume"],
          "method_mapping": {
            "SetVolume": "设置音响输出音量"
          }
        },
        "parameters": {
          "data_type": "object",
          "required": true,
          "description": "音量参数配置"
        }
      },
      "parameters_level": {
        "volume": {
          "data_type": "integer",
          "required": true,
          "description": "音量大小设置",
          "min_value": 0,
          "max_value": 100,
          "default_value": 50,
          "unit": "百分比",
          "value_interpretation": {
            "0": "静音模式,完全无声,最小音量",
            "30": "较低音量,适合安静环境",
            "50": "中等音量,正常使用",
            "70": "较高音量,适合较大空间",
            "100": "最大音量"
          }
        }
      }
    },
    "example_usage": {
      "valid_examples": [
        {
          "description": "设置中等音量",
          "command": {
            "type": "iot",
            "commands": [
              {
                "name": "Speaker",
                "method": "SetVolume",
                "parameters": {
                  "volume": 50
                }
              }
            ]
          }
        },
        {
          "description": "设置静音模式",
          "command": {
            "type": "iot",
            "commands": [
              {
                "name": "Speaker",
                "method": "SetVolume",
                "parameters": {
                  "volume": 0
                }
              }
            ]
          }
        }
      ]
    }
 }

{
    "description": "摄像头设备开关控制指令",
    "schema_version": "1.0",
    "field_specifications": {
      "root_level": {
        "type": {
          "data_type": "string",
          "required": true,
          "description": "指令类型标识,固定为'iot',表明物联网设备指令",
          "allowed_values": ["iot"],
          "purpose": "用于路由和验证指令类型"
        },
        "commands": {
          "data_type": "array",
          "required": true,
          "description": "包含一个或多个设备操作指令的数组",
          "purpose": "支持批量设备操作"
        }
      },
      "command_level": {
        "name": {
          "data_type": "string",
          "required": true,
          "description": "目标设备名称标识符",
          "allowed_values": ["Camera"],
          "purpose": "指定要操作的设备类型"
        },
        "method": {
          "data_type": "string",
          "required": true,
          "description": "要在设备上执行的操作方法",
          "allowed_values": ["openOrClose"],
          "purpose": "定义具体的设备行为",
          "method_mapping": {
            "openOrClose": "开关控制操作"
          }
        },
        "parameters": {
          "data_type": "object",
          "required": true,
          "description": "操作方法所需的参数集合",
          "purpose": "提供操作的具体配置参数"
        }
      },
      "parameters_level": {
        "action": {
          "data_type": "string",
          "required": true,
          "description": "摄像头的开关动作",
          "allowed_values": ["open", "close"],
          "value_descriptions": {
            "open": "打开摄像头",
            "close": "关闭摄像头"
          },
          "side_effects": "状态改变会影响设备的电源消耗和隐私保护"
        }
      }
    },
    "example_usage": {
      "valid_examples": [
        {
          "description": "打开摄像头",
          "command": {
            "type": "iot",
            "commands": [
              {
                "name": "Camera",
                "method": "openOrClose",
                "parameters": {
                  "action": "open"
                }
              }
            ]
          }
        },
        {
          "description": "关闭摄像头",
          "command": {
            "type": "iot",
            "commands": [
              {
                "name": "Camera",
                "method": "openOrClose",
                "parameters": {
                  "action": "close"
                }
              }
            ]
          }
        }
      ],
      "invalid_examples": [
        {
          "description": "错误示例:使用无效的action值",
          "command": {
            "type": "iot",
            "commands": [
              {
                "name": "Camera",
                "method": "openOrClose",
                "parameters": {
                  "action": "toggle"
                }
              }
            ]
          },
          "error_reason": "action只允许'open'或'close','toggle'不是有效值"
        }
      ]
    }
  }

需求是如果具有摄像头和麦克风的权限返回上面的摄像头json,如果具有麦克风和喇叭的权限返回上面的语音json,如果都有返回数组,没有返回空数组。

看到这段json实在是不想写一个个配置类,然后配置请求前缀,搞成一个个对象。也不想写这种对象,可以让ai直接根据json生成对象,本着简单为主,我的想法是用string接受,直接序列化返回对象,最终用个list返回就行。

但是在开发的过程中发现带{}的会存在数据取出来为””的情况,以下是我的解决方案,使用|

在yml中配置


device:
  camera: |
    {
      "description": "摄像头设备开关控制指令",
      "description_en": "camera_control",
      "schema_version": "1.0",
      "field_specifications": {
        "root_level": {
          "type": {
            "data_type": "string",
            "required": true,
            "description": "指令类型标识,固定为'iot',表明物联网设备指令",
            "allowed_values": ["iot"],
            "purpose": "用于路由和验证指令类型"
          },
          "commands": {
            "data_type": "array",
            "required": true,
            "description": "包含一个或多个设备操作指令的数组",
            "purpose": "支持批量设备操作"
          }
        },
        "command_level": {
          "name": {
            "data_type": "string",
            "required": true,
            "description": "目标设备名称标识符",
            "allowed_values": ["Camera"],
            "purpose": "指定要操作的设备类型"
          },
          "method": {
            "data_type": "string",
            "required": true,
            "description": "要在设备上执行的操作方法",
            "allowed_values": ["openOrClose"],
            "purpose": "定义具体的设备行为",
            "method_mapping": {
              "openOrClose": "开关控制操作"
            }
          },
          "parameters": {
            "data_type": "object",
            "required": true,
            "description": "操作方法所需的参数集合",
            "purpose": "提供操作的具体配置参数"
          }
        },
        "parameters_level": {
          "action": {
            "data_type": "string",
            "required": true,
            "description": "摄像头的开关动作",
            "allowed_values": ["open", "close"],
            "value_descriptions": {
              "open": "打开摄像头",
              "close": "关闭摄像头"
            },
            "side_effects": "状态改变会影响设备的电源消耗和隐私保护"
          }
        }
      },
      "example_usage": {
        "valid_examples": [
          {
            "description": "打开摄像头",
            "command": {
              "type": "iot",
              "commands": [
                {
                  "name": "Camera",
                  "method": "openOrClose",
                  "parameters": {
                    "action": "open"
                  }
                }
              ]
            }
          },
          {
            "description": "关闭摄像头",
            "command": {
              "type": "iot",
              "commands": [
                {
                  "name": "Camera",
                  "method": "openOrClose",
                  "parameters": {
                    "action": "close"
                  }
                }
              ]
            }
          }
        ],
        "invalid_examples": [
          {
            "description": "错误示例:使用无效的action值",
            "command": {
              "type": "iot",
              "commands": [
                {
                  "name": "Camera",
                  "method": "openOrClose",
                  "parameters": {
                    "action": "toggle"
                  }
                }
              ]
            },
            "error_reason": "action只允许'open'或'close','toggle'不是有效值"
          }
        ]
      }
    }

  voice: |
    {
      "description": "音响设备音量调节指令",
      "description_en": "volume_control",
      "field_specifications": {
        "root_level": {
          "type": {
            "data_type": "string",
            "required": true,
            "description": "指令类型标识,固定为'iot'",
            "allowed_values": ["iot"]
          }
        },
        "command_level": {
          "name": {
            "data_type": "string",
            "required": true,
            "description": "目标设备名称",
            "allowed_values": ["Speaker"],
            "device_mapping": {
              "Speaker": "音响设备"
            }
          },
          "method": {
            "data_type": "string",
            "required": true,
            "description": "音量设置方法",
            "allowed_values": ["SetVolume"],
            "method_mapping": {
              "SetVolume": "设置音响输出音量"
            }
          },
          "parameters": {
            "data_type": "object",
            "required": true,
            "description": "音量参数配置"
          }
        },
        "parameters_level": {
          "volume": {
            "data_type": "integer",
            "required": true,
            "description": "音量大小设置",
            "min_value": 0,
            "max_value": 100,
            "default_value": 50,
            "unit": "百分比",
            "value_interpretation": {
              "0": "静音模式,完全无声,最小音量",
              "30": "较低音量,适合安静环境",
              "50": "中等音量,正常使用",
              "70": "较高音量,适合较大空间",
              "100": "最大音量"
            }
          }
        }
      },
      "example_usage": {
        "valid_examples": [
          {
            "description": "设置中等音量",
            "command": {
              "type": "iot",
              "commands": [
                {
                  "name": "Speaker",
                  "method": "SetVolume",
                  "parameters": {
                    "volume": 50
                  }
                }
              ]
            }
          },
          {
            "description": "设置静音模式",
            "command": {
              "type": "iot",
              "commands": [
                {
                  "name": "Speaker",
                  "method": "SetVolume",
                  "parameters": {
                    "volume": 0
                  }
                }
              ]
            }
          }
        ]
      }
    }

在代码中使用


    @Value("${device.voice:{"description":"摄像头设备开关控制指令","description_en":"camera_control","schema_version":"1.0","field_specifications":{"root_level":{"type":{"data_type":"string","required":true,"description":"指令类型标识,固定为'iot',表明物联网设备指令","allowed_values":["iot"],"purpose":"用于路由和验证指令类型"},"commands":{"data_type":"array","required":true,"description":"包含一个或多个设备操作指令的数组","purpose":"支持批量设备操作"}},"command_level":{"name":{"data_type":"string","required":true,"description":"目标设备名称标识符","allowed_values":["Camera"],"purpose":"指定要操作的设备类型"},"method":{"data_type":"string","required":true,"description":"要在设备上执行的操作方法","allowed_values":["openOrClose"],"purpose":"定义具体的设备行为","method_mapping":{"openOrClose":"开关控制操作"}},"parameters":{"data_type":"object","required":true,"description":"操作方法所需的参数集合","purpose":"提供操作的具体配置参数"}},"parameters_level":{"action":{"data_type":"string","required":true,"description":"摄像头的开关动作","allowed_values":["open","close"],"value_descriptions":{"open":"打开摄像头","close":"关闭摄像头"},"side_effects":"状态改变会影响设备的电源消耗和隐私保护"}}},"example_usage":{"valid_examples":[{"description":"打开摄像头","command":{"type":"iot","commands":[{"name":"Camera","method":"openOrClose","parameters":{"action":"open"}}]}},{"description":"关闭摄像头","command":{"type":"iot","commands":[{"name":"Camera","method":"openOrClose","parameters":{"action":"close"}}]}}],"invalid_examples":[{"description":"错误示例:使用无效的action值","command":{"type":"iot","commands":[{"name":"Camera","method":"openOrClose","parameters":{"action":"toggle"}}]},"error_reason":"action只允许'open''close''toggle'不是有效值"}]}}}")
    private String deviceCameraResult;
    /**
     * 短信签名
     */
    @Value("${device.camera:{"description":"音响设备音量调节指令","description_en":"volume_control","field_specifications":{"root_level":{"type":{"data_type":"string","required":true,"description":"指令类型标识,固定为'iot'","allowed_values":["iot"]}},"command_level":{"name":{"data_type":"string","required":true,"description":"目标设备名称","allowed_values":["Speaker"],"device_mapping":{"Speaker":"音响设备"}},"method":{"data_type":"string","required":true,"description":"音量设置方法","allowed_values":["SetVolume"],"method_mapping":{"SetVolume":"设置音响输出音量"}},"parameters":{"data_type":"object","required":true,"description":"音量参数配置"}},"parameters_level":{"volume":{"data_type":"integer","required":true,"description":"音量大小设置","min_value":0,"max_value":100,"default_value":50,"unit":"百分比","value_interpretation":{"0":"静音模式,完全无声,最小音量","30":"较低音量,适合安静环境","50":"中等音量,正常使用","70":"较高音量,适合较大空间","100":"最大音量"}}}},"example_usage":{"valid_examples":[{"description":"设置中等音量","command":{"type":"iot","commands":[{"name":"Speaker","method":"SetVolume","parameters":{"volume":50}}]}},{"description":"设置静音模式","command":{"type":"iot","commands":[{"name":"Speaker","method":"SetVolume","parameters":{"volume":0}}]}}]}}}")
    private String deviceVoiceResult;
        // 如果有音量控制权限,添加音量控制指令
        if (aiHardwareSolution.getVoiceControlVolumeEnabled() != null 
                && aiHardwareSolution.getVoiceControlVolumeEnabled() == 1) {
            DeviceControlCommandVo volumeCommand = JSONUtil.toBean(deviceVoiceResult,DeviceControlCommandVo.class);
            result.add(volumeCommand);
        }

        // 如果有摄像头控制权限,添加摄像头控制指令
        if (aiHardwareSolution.getVoiceControlCameraEnabled() != null 
                && aiHardwareSolution.getVoiceControlCameraEnabled() == 1) {
            DeviceControlCommandVo cameraCommand = JSONUtil.toBean(deviceCameraResult,DeviceControlCommandVo.class);
            result.add(cameraCommand);
        }
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
张乐的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容