【问题标题】:JQ command to extract names into an array from a StringJQ 命令从字符串中提取名称到数组中
【发布时间】:2021-08-27 12:31:10
【问题描述】:

输入是一个文档。我将在字符串中以数字开头的名称

 {"doc": [
    {
      "cNo": "6222332 22450 32",
      "cNames": " 1 MANJSY JOAU 2 CHAFANH BINO",
      "cExpiry": "04/2025"
    },
    {
      "fields": 3,
      "documents": 1
    }
  ]}

预期的输出有时是一个名称数组,如下所示

 {"doc": [
    {
      "cNo": "6222332 22450 32",
      "cNameArray": [
                       "MANJSY JOAU",
                       "CHAFANH BINO"
                    ],
      "cExpiry": "04/2025"
    },
    {
      "fields": 3,
      "documents": 1
    }
  ]}

【问题讨论】:

  • 欢迎来到 SO。为避免您的问题被否决,请遵循minimal reproducible example 指南: (1) 仅举一个示例而不描述一般要求通常是不够的。 (2) 展示你尝试过的东西通常是个好主意。

标签: arrays json string jq


【解决方案1】:

据我了解,这个问题有两个主要部分:

  1. 将具有整数和非整数段的字符串转换为数组
  2. 将键名从 cNames 更改为 cNameArray

在目前的情况下,第一部分可以通过以下方式完成:

.doc[0] |= (.cNames |= [splits(" *[0-9] *")][1:])

第二个可以通过使用with_entries 来完成,从而保留键的顺序:

.doc[0] |= (.cNames |= [splits(" *[0-9] *")][1:]
            | with_entries(if .key == "cNames" 
                           then .key = "cNameArray"
                           else . end) )

【讨论】:

  • 我尝试使用 {name: [split("[0-9] *")][1:]} 但我收到此错误 jq: error (at :2): split输入和分隔符必须是字符串退出状态 5
  • 要求基本上是从字符串中提取人名 .. 从 1 charles john 2 mary kani 3 bijuhn mag
  • 我认为很明显你必须提取.names。查看更新。
  • 你能帮我提取名字吗,如果我的输入是这样的 "obj" : [{ "title": "Some Title", "tags":"1 tagA 2 tag-B 3 tagC" }, { "numberOfFields": 3, "numberOfFieldsExtracted": 3, "numberOfDocuments": 1 }]
  • 那不是有效的 JSON。我建议您通过添加另一个示例输入和相应的所需输出来更新您的 Q。
猜你喜欢
  • 2013-06-18
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
相关资源
最近更新 更多