Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json jq:从多个对象中查找唯一键_Json_Key_Distinct_Jq - Fatal编程技术网

Json jq:从多个对象中查找唯一键

Json jq:从多个对象中查找唯一键,json,key,distinct,jq,Json,Key,Distinct,Jq,我设法获得密钥列表,但无法将其作为传递到unique的列表 我想得到一份区域名称列表,即 "asia" "asia-east" "asia-northeast" "asia-south1" "asia-southeast" "australia" "australia-southeast1" 我可以手动删除“核心”、“内存”等。如果您将JSON数据放入文件中,您可以执行以下操作: cat data.json \ | jq '.gcp_price_list | del(.sustained_u

我设法获得密钥列表,但无法将其作为传递到
unique
的列表

我想得到一份区域名称列表,即

"asia"
"asia-east"
"asia-northeast"
"asia-south1"
"asia-southeast"
"australia"
"australia-southeast1"

我可以手动删除“核心”、“内存”等。

如果您将JSON数据放入文件中,您可以执行以下操作:

cat data.json \
| jq '.gcp_price_list | del(.sustained_use_base,.sustained_use_tiers) | .[] | keys[]' \
| uniq
唯一的jq解决方案:

.gcp_price_list
| del(.sustained_use_base,.sustained_use_tiers)
| [.[] | keys_unsorted[]]
| unique[]
(在此处使用
键\u unsorted
可保存不必要的排序。)

更好 上述解决方案存在两个主要问题:

a) 它使用
unique
,这涉及到不必要的(可能是不需要的)排序操作; b) 它包括值不是数字的键,因此可能被排除在外

以下变体解决了这两个问题。为方便起见,我们定义了以下通用函数:

def set(s): reduce s as $x ({}; .[$x | (type[0:1] + tostring)] = $x);

def distinct(s): set(s)[];

.gcp_price_list
| del(.sustained_use_base,.sustained_use_tiers)
| distinct(.[]
           | keys_unsorted[] as $k
           | select( getpath([$k]) | type == "number")
           | $k)

这仍然包括一些不相关的键,当然可以很容易地删除(例如使用数组减法)。

在我的windows机器上,最后使用PowerShell命令
Get Content file.txt | Sort Object-unique
,git bash中的
uniq
不知怎么起作用