我正在尝试使用正则表达式向JSON响应中的任何数字添加引号。下面是JSON的一个片段。任何帮助表示赞赏。
"videoIds":[2929365783001,2890489654001,2872798368001,...]
I need:
"videoIds":["2929365783001","2890489654001","2872798368001",...]
答案 0 :(得分:0)
使用正则表达式无法可靠地执行此操作。只需将响应解析为JSON,修改结果数据结构并根据需要将其重新序列化为JSON。以下是我在Python中的表现:
data = json.loads(response)
data["videoIds"] = [str(i) for i in data["videoIds"]]
modified_response = json.dumps(data)
答案 1 :(得分:0)
假设您的JSON字符串被称为str
,您可以尝试以下几种方法:
将JSON转换为JavaScript对象,然后将“videoIds”数组的内容转换为字符串,如:
var obj=JSON.parse(str),
rv=[];
obj.videoIds.forEach(function(elt){
rv.push(elt.toString());
});
obj.videoIds=rv;
str=JSON.stringify(obj);
提取str的videoIds部分,正则表达式添加双引号的数字,并替换它:
var matches=str.match(/"videoIds":\[([^\]]+)\]/),
targ=matches[0].replace(/[\[\]]/g,function(m){ return '\\'+m; }), // escape regex magic chars '[' and ']'
nums=matches[2].split(/,/),
rv='"videoIds":["'+nums.join('","')+'"]';
str=str.replace(new Regex(targ),rv); // replace the extracted line
但一般来说,在将原始对象转换为JSON之前修改原始对象可能更容易,因此所有数字实际上都是字符串。
答案 2 :(得分:0)
这是ruby中的正则表达方式。我假设除了缺少的引号,JSON很好。此代码将为所有键添加引号,并在没有引号的情况下添加空值。请注意,这会在数字,true
,false
,null
等值中添加双引号。
jsonstr = <<'LOD'
{
menu: {
id: "file",
"value": File,
"popup": {
"videoIds":[2929365783001,2890489654001,2872798368001,...],
toto:titi,
"\"glip":["glop\\",glup]
}
}
}
LOD
jsonstr = jsonstr.gsub(
/(?x)
( # group 1: possible content before a value or key without double quotes
(?>
(?> "(?>[^"\\]++|\\{2}|\\.)*+" )? # content inside double quotes
[\]\[}{:,\s]++ # spaces and special characters
)++
)
( [^\]\[{},:"]+? ) # group 2: value or key without double quotes
(?= \s* (?: [\]:,}] | \z ) )
/,
'\1"\2"')
puts jsonstr
组1用于跳过双引号之间的所有键或值。