You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JQ实现JSON字段单词首字母大写并保留LLC类缩写大写

JQ 实现字段首字母大写格式化方案

核心实现逻辑

  • 自定义titlecase函数实现通用的「单词首字母大写、其余字母小写」转换,专门用于brand_name、generic_name两个字段的格式化
  • 对manufacturer字段先执行通用首字母大写转换,再通过正则匹配将指定商业缩写替换回全大写格式,避免LLC这类固定缩写被错误转成首字母大写格式
  • 完全保留原有语句的筛选逻辑,不需要调整前置过滤规则

完整执行命令

直接替换原有的jq语句即可:

jq '
# 自定义标题大小写转换函数
def titlecase:
  ascii_downcase
  | split(" ")
  | map(if length == 0 then . else (.[:1] | ascii_upcase) + .[1:] end)
  | join(" ");

.results[]
| select(.openfda.brand_name != null or .openfda.generic_name != null or .openfda.rxcui != null)
| select(.openfda | has("rxcui"))
| {
    brand_name: (.openfda.brand_name[0] | titlecase),
    generic_name: (.openfda.generic_name[0] | titlecase),
    manufacturer: (
      .openfda.manufacturer_name[0]
      | titlecase
      | gsub("(?<![a-zA-Z])Llc(?![a-zA-Z])"; "LLC")
      # 新增其他保留缩写参照下面格式即可
      # | gsub("(?<![a-zA-Z])Inc(?![a-zA-Z])"; "Inc")
      # | gsub("(?<![a-zA-Z])Ltd(?![a-zA-Z])"; "Ltd")
    ),
    rxcui: .openfda.rxcui[0]
  }
' filename.json > newfile.json

输出效果

执行后得到的结果和预期完全一致:

{
  "brand_name": "Veltin",
  "generic_name": "Clindamycin Phosphate And Tretinoin",
  "manufacturer": "Almirall, LLC",
  "rxcui": "882548"
}

补充说明

  • 正则匹配缩写用了零宽断言,只会匹配独立出现的缩写字符串,不会误替换单词内部包含的同名字符
  • 如果字段里存在连字符、斜杠连接的单词需要特殊首字母大写,可以调整titlecase函数的拆分规则适配
  • 处理大文件时该逻辑不会额外增加明显性能开销,和原有语句的执行效率基本一致

内容的提问来源于stack exchange,提问作者kittonian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:48:14