【问题标题】:JQ avoid adding extra backslash in produced jsonJQ 避免在生成的 json 中添加额外的反斜杠
【发布时间】:2018-08-05 19:19:57
【问题描述】:

我正在使用带有 JQ 的 powershell 创建新值并将其附加到现有值:

$resp.Content | jq --arg newtag "ve\rsion" '.items[] | del(.href, .version, .Config) | .tag |= $newtag | {"Clusters": {"desired_config": .}}' > newconfig.json

问题是生成的json文件会有"ve\\rsion"而不是"ve\rsion"

我怎样才能只保留一个反斜杠。

【问题讨论】:

标签: json powershell jq


【解决方案1】:

除非另有说明,否则 jq 会生成有效的 JSON。 "ve\rsion" 不是有效的 JSON。因此,一种选择是使用 -r 命令行选项将 JSON 字符串转换为“原始”文本,但这只会影响实际上是字符串的输出实体;此选项还将从此类字符串中删除外引号。

您可能还需要考虑对输出进行后处理。

可能还有其他选择,但在不了解您更详细的要求的情况下,很难说哪个最好。

【讨论】:

  • 谢谢,-r 开关由于某种原因在输出文件中没有任何区别,但是正如建议的那样,我只是使用 (Get-Content .\newconfig.json).replace(' 从输出中删除引号\\', '\') |设置内容 .\newconfig.json
  • 原因在以“但是”开头的子句中给出。看起来您想生成无效的 JSON,这看起来很奇怪……您能解释一下原因吗?
  • 所以基本上我正在使用 Web 应用程序 API 并接收 JSON 响应,其配置文件的值包含“\n\n#”等字符,然后我需要将新字符串附加到此配置以进行修改并将其作为请求发回。不幸的是,JQ 将其更改为“\\n\\n#”,当在网络应用程序上查看时,它是一个长字符串。
  • 如果您将信息作为 JSON 发送回,那么接收方应该将其转换为原始字符串;如果您将信息作为原始字符串发送回,那么您应该可以使用 jq (带有 -r 选项)来构造它。由于您没有提供 mcve,因此很难知道最佳解决方案是什么。
  • $resp.Content | jq -r --arg newtag "version$unixTimeStamp" '.items[] |删除(.href,.version,.Config)| .tag |= $newtag | {“集群”:{“desired_config”:.}}' > newconfig.json
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2021-07-26
相关资源
最近更新 更多