我想将bash中的关联数组转换为json hash /
dict。我宁愿使用jq来执行此操作,因为它已经是一个依赖项,并且我可以依靠它来生成格式良好的json。有人可以演示如何实现这一目标吗?
#!/bin/bash
declare -A dict=()
dict["foo"]=1
dict["bar"]=2
dict["baz"]=3
for i in "${!dict[@]}"
do
echo "key : $i"
echo "value: ${dict[$i]}"
done
echo 'desired output using jq: { "foo": 1, "bar": 2, "baz": 3 }'
有很多可能性,但是鉴于您已经编写了一个bash for
循环,您可能希望从脚本的这种变体开始:
#!/bin/bash
# Requires bash with associative arrays
declare -A dict
dict["foo"]=1
dict["bar"]=2
dict["baz"]=3
for i in "${!dict[@]}"
do
echo "$i"
echo "${dict[$i]}"
done |
jq -n -R 'reduce inputs as $i ({}; . + { ($i): (input|(tonumber? // .)) })'
结果反映了bash for
循环产生的键的顺序:
{
"bar": 2,
"baz": 3,
"foo": 1
}
通常,基于馈送jq键值对的方法有很多值得推荐的方法,其中一个键在一行上,然后是对应的值在下一行上。下面给出了遵循此通用方案但使用NUL作为“行尾”字符的通用解决方案。
为了使以上内容更加通用,最好将键和值显示为JSON实体。在当前情况下,我们可以这样写:
for i in "${!dict[@]}"
do
echo "\"$i\""
echo "${dict[$i]}"
done |
jq -n 'reduce inputs as $i ({}; . + { ($i): input })'
JSON密钥必须是JSON字符串,因此可能需要做一些工作才能确保实现从bash密钥到JSON密钥的所需映射。类似的说明适用于从bash数组值到JSON值的映射。处理任意bash键的一种方法是让jq进行转换:
printf "%s" "$i" | jq -Rs .
当然,您可以对bash数组值执行相同的操作,然后让jq检查该值是否可以根据需要转换为数字或其他JSON类型(例如使用fromjson? // .
)。
这是jq常见问题解答中提到并由@CharlesDuffy倡导的通用解决方案。在将bash键和值传递给jq时,它将NUL用作定界符,其优点是只需要一次调用jq。如果需要,fromjson? // .
可以省略过滤器或将其替换为另一个。
declare -A dict=( [$'foo\naha']=$'a\nb' [bar]=2 [baz]=$'{"x":0}' )
for key in "${!dict[@]}"; do
printf '%s\0%s\0' "$key" "${dict[$key]}"
done |
jq -Rs '
split("\u0000")
| . as $a
| reduce range(0; length/2) as $i
({}; . + {($a[2*$i]): ($a[2*$i + 1]|fromjson? // .)})'
输出:
{
"foo\naha": "a\nb",
"bar": 2,
"baz": {
"x": 0
}
}
问题内容: 我有一个Bash脚本。它以JSON获取数据。我需要将JSON数组转换为Bash数组。 例 在Bash中,我想要获得这样的值。 问题答案: 如果您想要键和值,并且基于如何在JQ中将json对象转换为key =value格式,则可以执行以下操作: 以更通用的方式,您只需将语法提供给,就可以将值存储到这样的数组中: 然后您可以遍历像这样的值: 对于此给定的输入,它将返回:
哈希表的生成: 一个关联数组不通过下标来访问,而是通过主键(key)访问.这样的数组有时被叫作哈希(hash).将一对对的元素用逗号分隔开,并用大括号({})括起来,这样就组成了一个哈希表.你用一个关键字在哈希表里进行搜索,就像你在数组里用索引来提取数据一样. 例如: a={" Allex"=>2000," 帆布背包 "=>2003} 在这个例子中," Allex" 和 " 帆布背包 " 是主键(
一、数组变量的限制 在前面讲的数组变量中,可以通过下标访问其中的元素。例如,下列语句访问数组 @array 的第三个元素: $scalar = $array[2]; 虽然数组很有用,但它们有一个显著缺陷,即很难记住哪个元素存贮的什么内容。假如我们来写一个程序计算某文件中首字母大写的单词出现的次数,用数组来实现就比较困难,程序代码如下: 1 : #!/usr/local/bin/perl 2 : 3
问题内容: 如何将JavaScript关联数组转换为JSON? 我尝试了以下方法: 问题答案: 数组应仅包含带有数字键的条目(数组也是对象,但您实际上不应混用)。 如果将数组转换为JSON,则该过程将仅考虑数值属性。其他属性只是被忽略,这就是为什么您得到一个空数组的原因。如果您看一下数组的,也许这更加明显: 通常被称为“关联数组”的实际上只是JS中的一个对象: 可以通过数组符号或点符号(如果键不是
问题内容: 我正在使用jQuery将json对象发布到我的php应用程序中。 从firebug中提取的json字符串如下所示 在php中,我试图将其转换为关联数组。 到目前为止,我的PHP代码是 对ajax调用的响应应为“ about_us.php”,但返回空白。 问题答案: 您可以避免使用和: 和: 更新: …但是如果您真的想使用它们,则: 和:
问题内容: 具有如下数据结构: 如何构造Items的标题数组?如[‘One’,’Two’] 如果 标题 == [] {。,则此代码集将生成“语法错误:意外的标识符” 。 问题答案: 我只会用新数组返回标题 小提琴 此外,该错误是由于缺少括号引起的 应该 甚至更好