2013-12-15 48 views
0

我想用正則表達式來向JSON響應中的任何數字添加引號。下面是JSON的一個片段。任何幫助表示讚賞。JSON響應的正則表達式問題

"videoIds":[2929365783001,2890489654001,2872798368001,...] 

    I need: 
    "videoIds":["2929365783001","2890489654001","2872798368001",...] 
+0

任何JSON響應,或只是這個具體的?如果有的話,這是不可行的使用正則表達式。 –

+0

有沒有可能在這個JSON創建的地方解決這個問題,而不是之後呢?下面是一個例子,說明如何在特定場景下使用它:http://regex101.com/r/fN7tA1 –

+0

@scrowler這是來自brightcove的json響應。我試圖解析這個響應到一個Roku應用程序 – kilomo

回答

0

你不能用一個正則表達式可靠地做到這一點。只需將響應解析爲JSON,修改生成的數據結構並在需要時將其重新序列化爲JSON。以下是我會做它在Python:

data = json.loads(response) 
data["videoIds"] = [str(i) for i in data["videoIds"]] 
modified_response = json.dumps(data) 
0

假設你的JSON字符串被稱爲str,你可以嘗試幾件事情:

  1. 轉換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); 
    
  2. 提取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。

+0

這是我目前使用的。 %s/\([0-9] \ + \)/ \「\ 1 \」vim – kilomo

+0

如果您希望將JSON中的* all *數字轉換爲字符串,那應該沒問題。但是,如果您已將數字表示爲字符串,則您正在使用的RegExp將爲其添加多餘的引號。 –

0

這是一個紅寶石正則表達式。我假設除了缺少的引號外,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用於跳過雙引號之間的所有鍵或值。