转换为 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
与xidel:
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"
}
- 您可以使用
file:read-text-lines()
做所有“查询中”的事情。
我有 .属性 文件,我正尝试使用 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
与xidel:
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"
}
- 您可以使用
file:read-text-lines()
做所有“查询中”的事情。