转换为 json 时如何忽略 .properties 文件中的特定键

How to ignore particular keys inside .properties files while converting to json

我有 .属性 文件,我正尝试使用 bash 命令将其转换为 json 文件,我想排除显示在json 文件。下面是我在 属性 文件中的 .properties,我想排除 属性 4 和 5 被转换为 json

app.database.address=127.0.0.70
app.database.host=database.myapp.com
app.database.port=5432
app.database.user=dev-user-name
app.database.pass=dev-password
app.database.main=dev-database

这是我用于转换为 json 的 bash 命令,但它会将所有属性转换为 json

cat fle.properties | jq -R -s 'split("\n") | map(split("=")) | map({(.[0]): .[1]}) | add' > zppprop.json

有什么方法可以包含这些参数以排除转换为 json

您可以使用 grep 过滤掉不需要的行:

cat fle.properties | grep -v -E "user|pass" | jq -R -s 'split("\n") | map(select(length > 0)) | map(split("=")) | map({(.[0]): .[1]}) | add'

还需要去掉split函数返回的数组末尾的空字符串。这就是 map(select(length > 0)) 正在做的事情。

您可以在 jq 脚本中进行排除:

properties2json

#!/usr/bin/env -S jq -sRf

split("\n") |
map(split("=")) |
map(
  if .[0] | test(".*\.(user|pass)";"i")
  then
    {}
  else
    {(.[0]): .[1]}
  end
) |
add
# Make it executable
chmod +x properties2json

# Run it
./properties2json file.properties >file.json

:

XPath + JSONiq 解决方案

$ xidel -s fle.properties -e '
  {|
    x:lines($raw)[not(position() = (4,5))] ! {
      substring-before(.,"="):substring-after(.,"=")
    }
  |}
'
{
  "app.database.address": "127.0.0.70",
  "app.database.host": "database.myapp.com",
  "app.database.port": "5432",
  "app.database.main": "dev-database"
}
  • x:lines($raw)tokenize($raw,'\r\n?|\n') 的 shorthand 并将原始输入 $raw 转换为一个序列,其中每个新行都是另一个项目。
  • [not(position() = (4,5))] 如果它始终是您要排除的第 4 行和第 5 行。否则,使用 [not(contains(.,"user") or contains(.,"pass"))] 如下所示。

XQuery解决方案

$ xidel -s --xquery '
  map:merge(
    for $x in file:read-text-lines("fle.properties")[not(contains(.,"user") or contains(.,"pass"))]
    let $kv:=tokenize($x,"=")
    return
    {$kv[1]:$kv[2]}
  )
'
{
  "app.database.address": "127.0.0.70",
  "app.database.host": "database.myapp.com",
  "app.database.port": "5432",
  "app.database.main": "dev-database"
}

Playground.