有没有什么简单的命令行选项可以将我的整个etcd数据库导出到json文件中,同时还可以自动从Base64解码键和值?

到目前为止,我成功的是(示例show 1x key/Value):

   ./etcdctl get "" --prefix -w json | jq -r ".[] | .[]  "
 {
 "key": "YnktZGV2L21ldGEvc25hcHNob3RzL3Jvb3QtY29vcmQvcGFydGl0aW9ucy80NDAwNDc0MjQ2MTgzNjUxNzAvNDQwMDQ3NDI0NjE4MzY1MTcxX3RzNDQwMDQ5NDg5ODkxODE5NTI0",
"create_revision": 44536,
"mod_revision": 44536,
"version": 1,
"value": "CPOB0OXRmdeNBhIIX2RlZmF1bHQYhIDgxN/V140GIPKB0OXRmdeNBg=="
}

但我需要将整个数据库键和值解码为人类可读的格式?

谢谢

附注: @Jeff Mercado帮助后的最终解决方案:

1. /etcdctl get "" --prefix -w json | jq '.[]' > etcd_filter.txt
2. Clear output to form array of objects [{},{} ...{}]
3. cat etcd_filter.txt | jq '.[] | (.key, .value) |= @base64d'

jq playground

推荐答案

如果编码的数据是字符串而不是二进制数据,则可以使用@base64d过滤器将其解码为UTF-8字符串.这应该在JQ 1.6中可用.

$ ./etcdctl ... | jq '.[][] | (.key, .value) |= @base64d'
{
  "key": "by-dev/meta/snapshots/root-coord/partitions/440047424618365170/440047424618365171_ts440049489891819524",
  "create_revision": 44536,
  "mod_revision": 44536,
  "version": 1,
  "value": "\b���љ׍\u0006\u0012\b_default\u0018������׍\u0006 ���љ׍\u0006"
}

在您的示例中,该值似乎不是UTF-8字符串,因此要小心.遗憾的是,它不返回字节数组,因此对于这些情况可能不是很有用.

jqplay

Json相关问答推荐

我可以使用JQ来缩小数组中的json对象的范围吗?

如何循环访问多个子数组并在单个JSON中检索数据点

Golang返回的JSON顶级字段是可变的.如何在 struct 中使用

在深度嵌套数组中使用布尔属性的jq-select

JOLT转换以基于对象属性过滤JSON数组

jq 对特定键进行过滤并将值整理到单个 csv 单元格中

PostgreSQL:删除 JSONB 数组中每个元素的特定键

小写嵌套特定键的震动转换

父键中的 Perl JSON 数组

jq:来自嵌套 JSON 的映射

使用 ConvertFrom-Json 后,Powershell 访问 JSON 中的嵌套对象

TSQL FOR JSON 嵌套值

JSON 模式实际用于什么目的?

在循环中将变量添加到 bash 数组

ASP.NET MVC - 将 Json 结果与 ViewResult 结合起来

如何在已声明的 JSON 对象中添加键值对

杰克逊:反序列化 for each 值都具有正确类型的 Map

通过 JSON 发送 HTML 代码

Volley JsonObjectRequest Post 参数不再起作用

JSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题