热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在JSONNet中查找数组元素的索引

本文介绍如何在Grafana配置面板时,使用JSONNet获取数组中特定元素的位置,并将其应用于动态服务查询。

我正在使用tstanisl的答案在Grafana中配置面板。这是我第一次使用它,感觉非常棒。然而,在理解某些细节方面遇到了一些困难。

我的代码如下:

.addTemplate(
template.new(
microservices, datasource='', query=std.join(',', std.map(function(x) x.text, service['microservices'])), label=services))

我想做的是根据给定的微服务名称找到它在数组中的位置,以便可以将其分配给一个可变的服务变量(然后通过query = std.join(‘,’, std.map(function(x) x.text, service['microservices']))获得自定义值)。

变量 services 的结构如下:

[{
"key": "asd",
"microservices": [
{"key": "I HAVE THIS VALUE", "text": "ads"},
{"key": "asd", "text": "asd"}
],
"name": "bca",
"services": [{"key": "bca", "name": "bca"}]
}, {
"key": "bca",
"microservices": [
{"key": "bca", "text": "bca"},
{"key": "bca", "text": "bca"}
]
}, {
"key": "abc",
"name": "abc",
"services": [{"key": "ccc", "name": "ccc"}]
}]

在其他编程语言中,这是一个基本操作,但在JSONNet中实现这一点可能需要一些技巧。

例如,在Go语言中,可以通过以下方式实现:

var srv type
for x, service := range services {
for _, microservice := range service.microservices {
if microservice.key == "my value" {
srv = services[x]
}
}
}

那么,在JSONNet中应该如何实现呢?

实际上,在JSONNet中这也是一项相对简单的任务。最自然的方法是使用数组推导,它可以方便地进行过滤:

local service2 = [
s for s in services
if [ms for ms in s.microservices if ms.key == "I HAVE THIS VALUE"] != []
][0];

请注意,索引 [0] 假设只有一个匹配项或您只关心第一个匹配项。如果有多个匹配项或没有匹配项,您需要明确处理这些情况。

如果需要实际索引,可以稍微复杂一点:

local serviceIndex = [
x for x in std.range(0, std.length(services) - 1)
if [ms for ms in services[x].microservices if ms.key == "I HAVE THIS VALUE"] != []
][0];

此外,您可以使用 std.filter 函数来实现相同的效果,但这种方式会更冗长。

为了提高代码的可读性,建议提取一个函数 hasMicroservice(service, msKey) 来简化过滤逻辑。


推荐阅读
  • 交互式左右滑动导航菜单设计
    本文介绍了一种使用HTML和JavaScript实现的左右可点击滑动导航菜单的方法,适用于需要展示多个链接或项目的网页布局。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文介绍如何在Laravel框架中集成微信支付功能,包括如何配置微信支付环境、处理支付请求及接收支付回调等关键步骤。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • 在尝试从数据库获取设置的过程中,遇到了一个致命错误:Fatal error: Call to a member function bind_param() on boolean。本文将详细分析该错误的原因,并提供解决方案。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文将指导如何向ReactJS计算器应用添加必要的功能,使其能够响应用户操作并正确计算数学表达式。 ... [详细]
  • 本文介绍了如何通过ARM编译器组件重定向标准C运行时库的I/O函数,以适应不同的硬件平台。原文链接:https://www.keil.com/pack/doc/compiler/RetargetIO/html/retarget_overview.html ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
author-avatar
安琪儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有