我有一个json字符串,我需要将其转换为用于传递密码的数组。当前问题是我需要为许多用户执行此操作
当前json看起来像是从
生成的[
{
"password": "Password1",
"loginId": "USER1"
}
]
我需要将其更改为此
[
{
"password":[
"P",
"a",
"s",
"s",
"w",
"o",
"r",
"d",
"1"
],
"loginId":"USER1"
}
]
我更愿意以bash的方式执行此操作,但是如果有人有其他选择,那么我会接受任何事情。
答案 0 :(得分:2)
答案 1 :(得分:1)
通过Xidel,您可以使用XPath / XQuery函数x:cps()
两次将字符串转换为数组,并使用map:put()
更新JSON。
xidel -s input.json -e '[$json()/map:put(.,"password",x:cps(x:cps(password)))]'
[
{
"password": [
"P",
"a",
"s",
"s",
"w",
"o",
"r",
"d",
"1"
],
"loginId": "USER1"
}
]
答案 2 :(得分:0)
通过Bash处理JSON是一个坏主意。 Awk一点也不好,但是可以做到:
structure(list(test1 = c(0.12, 0.2, 0.55, 0.22, 0.19, 0.17, 0.15,
0.12, 0.32, 0.23, 0.32, 0.23), test2 = c(0.15, 0.12, 0.32, 0.23,
0.12, 0.2, 0.55, 0.22, 0.12, 0.2, 0.55, 0.22), test3 = c(0.07,
0.01, 0, 0.13, 0.16, 0.78, 0.98, 0.1, 0.5, 0.3, 0.4, 0.5), test4 = c(0.23,
0.12, 0.2, 0.2, 0.55, 0.22, 0.12, 0.2, 0.55, 0.22, 0.55, 0.42
), out_test1 = c(0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1), out_test2 = c(0,
0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1), out_test3 = c(0, 0, 0, 0, 0,
1, 1, 0, 1, 1, 1, 1), out_test4 = c(1, 0, 1, 1, 1, 1, 0, 1, 1,
1, 1, 1)), row.names = c(NA, -12L), class = c("tbl_df", "tbl",
"data.frame"))
另一方面。我认为正确的工具实际上是Python 3:
awk -F':' '
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
!/"password"/ {
print $0
}
/"password"/ {
found=1;
print $1 ":["
password = $2
gsub(/"|,/, " ", password)
split(trim(password),letters,"")
for(c=1; c <= length(letters); c++ ) {
printf("\t\t\"%s\"",letters[c])
if (c != length(letters)) {
printf(",\n")
}else{
printf("\n\t\t]\n")
}
}
}
' input.txt
希望这会有所帮助!