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

如何从JSON字典获取green值?Salt SLS模板报错修复

问题分析与解决方案

报错原因

你的SLS代码遍历了JSON顶层的所有键值对,但顶层的name、uuid对应的值是字符串类型,并非字典,当尝试访问value['state']时,自然会触发str object has no attribute 'state'的错误——只有status下的嵌套字典(overall、statuses数组内的元素)才包含state字段。

正确获取green值的方案

根据需求,你可以直接定位到目标字段,或者针对性遍历包含state的层级:

方案1:直接获取整体状态(status.overall.state)

如果只需要获取全局的green状态,无需遍历所有顶层键:

{% set json_data = salt.cp.get_url('http://localhost:9200/api/status', dest=None) | load_json %}

# 获取整体状态的state值
overall_state: {{ json_data['status']['overall']['state'] }}
{% if json_data['status']['overall']['state'] == 'green' %}
整体状态正常:{{ json_data['status']['overall']['nickname'] }}
{% endif %}

方案2:遍历所有服务状态项(status.statuses)

如果需要检查所有服务状态的state值,直接遍历status.statuses数组即可:

{% set json_data = salt.cp.get_url('http://localhost:9200/api/status', dest=None) | load_json %}

{% for status_item in json_data['status']['statuses'] %}
服务ID: {{ status_item['id'] }}
状态: {{ status_item['state'] }}
{% if status_item['state'] == 'green' %}
- 该服务状态正常:{{ status_item['message'] }}
{% endif %}
{% endfor %}

方案3:兼容顶层遍历的修复(避免字符串类型报错)

如果一定要保留顶层遍历的逻辑,需要先判断值是否为字典类型,再访问state:

{% set json_data = salt.cp.get_url('http://localhost:9200/api/status', dest=None) | load_json %}

{% for key, value in json_data.items() %}
{% if key == 'status' %}
  # 处理overall状态
  {% if value['overall']['state'] == 'green' %}
  overall状态: {{ value['overall']['state'] }} (found)
  {% endif %}
  
  # 处理statuses数组
  {% for item in value['statuses'] %}
  {% if item['state'] == 'green' %}
  服务{{ item['id'] }}状态: {{ item['state'] }} (found)
  {% endif %}
  {% endfor %}
{% else %}
{{ key }}: {{ value }}
{% endif %}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:20:37