我想用正則表達式來向JSON響應中的任何數字添加引號。下面是JSON的一個片段。任何幫助表示讚賞。JSON響應的正則表達式問題
"videoIds":[2929365783001,2890489654001,2872798368001,...]
I need:
"videoIds":["2929365783001","2890489654001","2872798368001",...]
我想用正則表達式來向JSON響應中的任何數字添加引號。下面是JSON的一個片段。任何幫助表示讚賞。JSON響應的正則表達式問題
"videoIds":[2929365783001,2890489654001,2872798368001,...]
I need:
"videoIds":["2929365783001","2890489654001","2872798368001",...]
你不能用一個正則表達式可靠地做到這一點。只需將響應解析爲JSON,修改生成的數據結構並在需要時將其重新序列化爲JSON。以下是我會做它在Python:
data = json.loads(response)
data["videoIds"] = [str(i) for i in data["videoIds"]]
modified_response = json.dumps(data)
假設你的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。
這是我目前使用的。 %s/\([0-9] \ + \)/ \「\ 1 \」vim – kilomo
如果您希望將JSON中的* all *數字轉換爲字符串,那應該沒問題。但是,如果您已將數字表示爲字符串,則您正在使用的RegExp將爲其添加多餘的引號。 –
這是一個紅寶石正則表達式。我假設除了缺少的引號外,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用於跳過雙引號之間的所有鍵或值。
任何JSON響應,或只是這個具體的?如果有的話,這是不可行的使用正則表達式。 –
有沒有可能在這個JSON創建的地方解決這個問題,而不是之後呢?下面是一個例子,說明如何在特定場景下使用它:http://regex101.com/r/fN7tA1 –
@scrowler這是來自brightcove的json響應。我試圖解析這個響應到一個Roku應用程序 – kilomo