我有一个嵌套的类JSON文档,格式如下,我试图用python读取。我试图在非数字原子值周围加上引号("")。我尝试使用带有正则表达式的python:
import re
valid_json = re.sub(r'(?<={|,)([a-zA-Z][a-zA-Z0-9]*)(?=:)', r'"\1"',
json_data)
数据文件如下:
{
"Attri1": 26789381,
"Attri2": hjewvbfasnd3672183knsa,
"Attri9": 457950,
"Attri10": [
{
"NestedAtri1": vwebsn632871yb,
"NestedAttri2": [
{
"A1": 0,
"A2": ABB1,
"A3": 30,
"A5": [
000,001
]
},
{
"A1": 0,
"A2": ABB1,
"A3": 30,
"A5": [
000,001
]
}
]
},
{
"NestedAtri1": rgdf3423,
"NestedAttri2": [
{
"A1": 0,
"A2": C,
"A3": 50,
"A5": [
000,001
]
},
{
"A1": 0,
"A2": ABB1,
"A3": 30,
"A5": [
000,001
]
}
]
}
]
}
预期输出带有值周围的引号。
{
"Attri1": 26789381,
"Attri2": "hjewvbfasnd3672183knsa",
"Attri9": 457950,
"Attri10": [
{
"NestedAtri1": "vwebsn632871yb",
"NestedAttri2": [
{
"A1": 0,
"A2": "ABB1",
"A3": 30,
"A5": [
"000,001"
]
},
{
"A1": 0,
"A2": "ABB1",
"A3": 30,
"A5": [
"000,001"
]
}
]
},
{
"NestedAtri1": "rgdf3423",
"NestedAttri2": [
{
"A1": 0,
"A2": "C",
"A3": 50,
"A5": [
"000,001"
]
},
{
"A1": 0,
"A2": "ABB1",
"A3": 30,
"A5": [
"000,001"
]
}
]
}
]
}
有没有办法可以使用python / json或任何其他库添加引号。或者我可以使用jq过滤器来添加引号。 感谢
答案 0 :(得分:1)
这是一个awk脚本,它将处理你的例子和其他类似的,但它不健壮。例如,它不会正确处理带有嵌入空格的键。
awk '
function ws(line, s) {
s=line; sub(/[^ ].*/, "", s);
return s;
}
# Global: $0
# print a value with quotation marks, checking for punctuation
function printit(s, w) {
if ( s ~ /^[\[{]$/ ) { print $0; return}
w=s; sub(/,$/, "", w);
printf "\"%s\"", w;
if (w != s) {printf "%s", ","}
print "";
}
NF==1 && ($1 ~ /^[][{}],?$/) { print; next }
NF==2 && ($2 ~ /^[][{}],?$/) { print; next }
NF==2 && ($2 ~ /^[0-9]+,?$/) { print; next }
NF==2 && ($2 ~ /^".*",?/ ) { print; next }
# key: value
$1 ~ /^".*":$/ {
printf "%s", ws($0) $1 " ";
$1=""; sub(/^ /,"",$0); printit($0);
next;
}
NF == 1 {
printf "%s", ws($0); # indentation
printit($1);
next;
}
{print}
'