jq-win64.exe:从 Windows 批处理文件中的 JSON 文件解析数据

Posted

技术标签:

【中文标题】jq-win64.exe:从 Windows 批处理文件中的 JSON 文件解析数据【英文标题】:jq-win64.exe: Parsing data from a JSON file in Windows Batch File 【发布时间】:2022-01-03 00:13:03 【问题描述】:

我有以下 JSON 文件 (song.json),其中包含:


  "Result": [
    
      "ItemTitle": "Sometimes It Hurts",
      "Artists": [
        "Voost"
      ],
      "MediaEnd": "00:02:15.8490000",
      "Extro": "00:02:12.8200000",
      "MediaId": 9551,
      "ActualLength": "00:02:12.8200000",
      "ItemType": "Song"
    ,
    
      "ItemTitle": "Been a Long Time (Full Intention 2021 Remix)",
      "Artists": [
        "The Fog"
      ],
      "MediaEnd": "00:03:11.3170000",
      "IntroEnd": "00:00:07.4700000",
      "Extro": "00:03:08.6300000",
      "MediaId": 9489,
      "ActualLength": "00:03:08.6300000",
      "ItemType": "Song"
    
  ],
  "ExceptionMessage": null,
  "FailMessage": null,
  "ExceptionTypeName": null

我想提取第一个“ItemTitle”和第一个“Artist”并将它们保存为变量。

在这个例子中,我正在寻找的结果是:

ItemTitle=Sometimes It Hurts

Artist=Voost

我一直在尝试使用 jq-win64.exe,因为它需要在 Windows 批处理文件中运行,但我无法获得正确的语法。我尝试了在这里找到的各种示例,但它们似乎都没有按要求工作。任何人都可以提出解决方案吗?

【问题讨论】:

您可以使用jq -r 'Result[].ItemTitle, Result[].Artist song.json' 来提取所需部分的值。 对不起,我发现我留下了一个错字。使用jq -r .Result[].ItemTitle, .Result[].Artists[] song.json。看看this @Barbaros Özhan - 谢谢,但我收到错误:jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Windows cmd shell quoting issues?) at , line 1: 'Result[].ItemTitle, jq: 1 编译错误 很抱歉,我仍然收到同样的错误消息。 我认为 jq 可能与 jq-win64 不同,因为我仍然遇到相同的错误。但是,您在 jqplay 上的示例并没有产生我正在寻找的内容。我只需要 FIRST ItemTitle 和 Artist。第二个需要忽略。 【参考方案1】:

首先要做的事情。

由于您似乎在几个方面都遇到了麻烦,我建议您首先让您的 jq 查询以您想要的方式工作 通过使用带有 -f 命令行选项的 jq。这样,您可以编写查询而不必担心 用于在命令行上转义字符的 Windows 规则。当结果如你所愿时,你甚至可能决定 别管它。

接下来,要获取您想要的值,您似乎需要这样的 jq 查询:

.Result | first(.[].ItemTitle), first(.[].Artists[])

使用您的 JSON,这会产生:

Sometimes It Hurts
Voost

但是您说您希望这些值采用 KEY=VALUE 形式。这可以通过修改基本查询来实现,例如如下:

.Result|"ItemTitle=\(first(.[].ItemTitle))", "Artist=\(first(.[].Artists[]))"

不知何故,我怀疑这是否真的是你想要的,但其余的应该是一帆风顺的。

【讨论】:

在@Barbaros Özhan 的帮助下,我们确定了正确的过滤器是:--raw-output '.Result[0].ItemTitle, .Result[0].Artists[]' 但是,我在 Windows 命令行中使用 jq-win64.exe,当我输入以下内容时:@ 987654325@ 我得到:jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Windows cmd shell quoting issues?) at <top-level>, line 1: '.Result[0].ItemTitle, jq: 1 compile error 我想我快到了,所以任何进一步的指导将不胜感激。 cmd.exe 只能识别双引号,不能识别单引号。

以上是关于jq-win64.exe:从 Windows 批处理文件中的 JSON 文件解析数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在批处理bat文件中,以管理员的身份运行其他exe安装程序?

windows 下借助7zip实现命令行解压缩

JAVA 环境安装包 JDK 64位 jdk-8u221-windows-x64.exe

如何从另一个 Windows 批处理脚本调用一个 Windows 批处理脚本并在两者中延迟扩展

从 URL 下载 Windows 批处理文件文件

无法从 Windows 批处理脚本构建 C 程序