我正在尝试从的JSON输出解析环境变量docker inspect
。令人讨厌的是,这些环境变量没有作为有用的键值对返回。它们只是x =
y字符串的数组。这是输出的相关代码段:
[
{
"Config": {
"Env": [
"JENKINS_HOST=1.2.3.4",
"JENKINS_INSTANCE=tea",
"JENKINS_NAME=Enterprise Architecture Tools",
"JENKINS_VERSION=2.46.2",
"JENKINS_PROTOCOL=http"
]
}
}
]
我想将该数组转换为这样的东西:
{
"Config": {
"Env": {
"JENKINS_HOST": "1.2.3.4",
"JENKINS_INSTANCE": "tea",
"JENKINS_NAME": "Enterprise Architecture Tools",
"JENKINS_VERSION": "2.46.2",
"JENKINS_PROTOCOL": "http"
}
}
}
这样,我可以使用一条命令jq '.[] | .Config.Env.JENKINS_HOST'
来获取我关心的值。我不知道如何做到这一点。
选择数据甚至将键和值拆分为单独的元素相对容易。例如,如果使用jq '.[] | .Config.Env | .[] | split("=")'
,我将获得如下数据:
[
"JENKINS_HOST",
"1.2.3.4"
]
[
"JENKINS_INSTANCE",
"tea"
]
[
"JENKINS_NAME",
"Enterprise Architecture Tools"
]
[
"JENKINS_VERSION",
"2.46.2"
]
[
"JENKINS_PROTOCOL",
"http"
]
但是,我不知道如何将数据转换为对象分配。似乎应该是map
或的某种组合reduce
,但是我很困惑。谁能指出我正确的方向?
要将两个字符串(例如[“ k”,“ v”])的数组转换为对象,可以编写:
{ (.[0]) : .[1] }
因此,您需要编写类似以下内容的内容:
map(.Config.Env |= (map( split("=") | { (.[0]) : .[1] } ) | add))
抽象出数组到对象的功能使解决方案更易于理解:
def a2o: map( split("=") | { (.[0]) : .[1] } ) | add;
map(.Config.Env |= a2o)
match
或capture
代替split
由于可能在每个var=value
字符串的“值”部分出现“
=”字符,因此split
天真地使用可能不是一个好主意。假设您的jq支持正则表达式,这是一个更可靠的选择:
match("([^=]*)=(.*)") | .captures | {(.[0].string) : .[1].string}
或者,更简洁一些,也可能更优雅一些:
[capture( "(?<key>[^:]*):(?<value>.*)" )] | from_entries
index/1
如果您的jq不支持正则表达式,则可以index/1
按照以下方式使用:
index("=") as $ix | {(.[:$ix]) : .[$ix+1:]}
我有这个JSON: 我想打印键值对,其中键匹配状态和选项,以及时间和它的值。我可以通过使用下面的命令打印时间和所有键值对,但不确定如何提取特定的键值对。 这将产生以下输出: 但我想要的结果是:
问题内容: 我试图用来构造一个哈希值,其中键名来自变量。像这样: 但是,这不起作用,并出现以下错误: 问题答案: 使用括号可以尽早评估:
问题内容: 几年前我有这个面试问题,但是我还没有找到答案。 做无限循环的x和y应该是什么? 我们试着用,, VS 。 问题答案: 您需要两个可比较,具有相同值但代表不同实例的变量,例如: 和都为true,因为取消了装箱,但是实例相等性为false。 请注意,它也可以与一起使用,并且任何值(不仅是0)都可以使用。 您还可以使用JVM的复杂性-它们通常仅缓存最多127个整数,因此也可以使用: (但是1
问题内容: 我有以下json文件: 我正在使用jq,并想获取“位置”为“斯德哥尔摩”的对象的“名称”元素。 我知道我可以通过 但是给定子键的值(在此),我无法弄清楚如何仅打印某些对象。 问题答案: 根据关于使用jq处理JSON的文章改编而成,您可以这样使用:
虽然很多 Spark 操作工作在包含任意类型对象的 RDDs 上的,但是少数几个特殊操作仅仅在键值(key-value)对 RDDs 上可用。最常见的是分布式 "shuffle" 操作,例如根据一个 key 对一组数据进行分组和聚合。 在 Scala 中,这些操作在包含二元组(Tuple2)(在语言的内建元组中,通过简单的写 (a, b) 创建) 的 RDD 上自动地变成可用的,只要在你的程序中导
问题内容: 我需要在Seaborn distplot上绘制与某些X值相对应的点,以使它们落在密度曲线上或低于密度曲线。这是来自以下URL的distplot: 从Seaborn网站-distplot示例 因此,例如,在上面显示的曲线图中,我需要以编程方式确定与落在密度曲线上的X值0对应的Y轴值是多少。从图中看来,它大约在0.37左右。如何在我的程序中得到它? 假设可以做到,那么我如何在所示的图中显示