【问题标题】:JQ - How to remove quotes from keysJQ - 如何从键中删除引号
【发布时间】:2019-11-20 14:27:43
【问题描述】:

我正在使用 JQ 来呈现一些 JSON。一切都很好,但我需要的是没有键引号的输出。尝试使用原始选项,但这根本没有帮助。

脚本:

jq --raw-output --arg ID "$ID" '[.articles[] | { ...

输出:

[
  {
    "id": "20191022203822",
    "title": "How tech companies measure “legal”",

我需要的是:

[
  {
    id: "20191022203822",
    title: "How tech companies measure “legal”",

有人可以帮忙吗?

【问题讨论】:

  • 那不是有效的 json。我担心除了将 json 加载到可以解析它并以您喜欢的任何格式自己输出的语言之外别无选择。
  • 好吧,有些人可以将其读取为字符串,而不是名称/键。
  • 每个符合 JSON 的实用程序都会按照 JSON 语法输出一个完整的 JSON,而您想要的是非 JSON 输出。我想你最好的选择是通过sed 运行它,你从标签中删除引号(但这种方法容易出现误报),例如:jq ... | sed -E 's/(^ +)"([^"]+)":/\1\2:/'
  • @Dmitry Dude,你让我很开心,请添加作为答案。
  • 某些程序(例如 mongo 集合配置或某些 javascript 字典格式)接受 json 之类的对象,其中键缺少引号。如果有人想知道为什么我们需要一种简单的方法来生成不兼容的 json 对象。

标签: json bash shell parsing jq


【解决方案1】:

根据 OP 的要求,将我的评论添加到答案中:

每个符合 JSON 的实用程序都会按照 JSON 语法输出完整的 JSON,而您想要的是非 JSON 输出。我想你最好的办法是通过sed 运行它,你从标签中删除引号(但这种方法容易出现误报):

jq ... | sed -E 's/(^ *)"([^"]*)":/\1\2:/'

(注意,我将 + 正则表达式量词更改为 * 以普遍匹配空标签和零缩进)

【讨论】:

    【解决方案2】:

    jq 是图灵完备的,所以问题只是让 jq 生成非 JSON 输出有多容易。

    在目前的情况下,可以从递归定义开始:

    def printObject(offset):
      (offset * " " // "") as $offset
      | reduce to_entries[] as $kv ("";
          ($kv.value
           | if type == "string" then "\"\(.)\""
             elif type == "object" then printObject(offset+2)
             else . end) as $v
          | . + $offset  +  "  \($kv.key): \($v)\n")
      | "{\n" + . + $offset + "}";
    
    

    有了这个定义,

    {a:1, b:"etc", c: {d: [1,2,3]} } | printObject(0)
    

    产生:

    {
      a: 1,
      b: "etc",
      c: {
        d: [1,2,3]
      }
    }
    

    【讨论】:

    • 我很好奇,jq 是否处理递归调用?您的代码 sn-p 仅限于平面对象,嵌套呢?
    • 令人印象深刻! :)
    【解决方案3】:

    基于@Dmitry 的回答,由于特殊字符仍需要在键中引用,我发现调整以添加一些特殊字符会有所帮助:

    jq ... | sed -E 's/(^ *)"([^".:-]*)":/\1\2:/'
    

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2014-02-17
      • 1970-01-01
      • 2020-04-12
      • 2020-01-11
      • 2020-02-22
      • 1970-01-01
      • 2015-03-06
      • 2020-06-21
      相关资源
      最近更新 更多