如何更新复制的 JSON 字符串中的 UUID 字段?

How can you update a UUID field in a copied JSON string?

我的粘贴缓冲区中有一个 JSON 字符串:

{ "uuid":"886c69ba-c487-45a9-982e-f22820059a78", "meaningOfLife": 42 }

我想将 UUID 更新为全新的 V4 UUID(随机),然后用新字符串覆盖粘贴缓冲区。我如何在 Linux/Mac 机器的命令行中执行此操作?

这可以通过结合使用一些实用程序来解决。

首先,想出一种在命令行中创建新UUID的方法。有很多种方法,一种方法是安装 gen-uuid after npm is installed,例如npm i gen-uuid -g。完成后,您可以 运行 以下代码:

UUID=`gen-uuid`
pbpaste | sed "s/\"uuid\":\"[^\"]*\"/\"uuid\":\"$UUID\"/g" | pbcopy

这将变成

{ "uuid":"886c69ba-c487-45a9-982e-f22820059a78", "meaningOfLife": 42 } 变成这样:

{ "uuid":"aab21875-d9d7-4d55-9204-f2d7a9b34109", "meaningOfLife": 42 }

我更喜欢在我的 ~/.bash_profile 文件中放置这样的复杂命令,如下所示:

# overwrite JSON string with a new uuid V4
newu() {
  UUID=`gen-uuid`
  pbpaste | sed "s/\"uuid\":\"[^\"]*\"/\"uuid\":\"$UUID\"/g" | pbcopy
}

然后,从您的命令行,您可以 运行 newu 任何 JSON 字符串,其中包含 UUID!

更新:如@chepner 所述,您还可以使用 jq 实用程序(使用 brew install jq 在 Mac 上使用 brew 安装)来提高可读性并降低易碎性这个 sed 命令。请注意 jq 如果无效 JSON.

将抛出错误
# overwrite JSON string with a new uuid V4
newu() {
  UUID=`gen-uuid`
  pbpaste | jq --indent 0 ".uuid = \"$UUID\"" | pbcopy
}