2016-05-31 33 views
0

我打電話從谷歌表API的數據,每一行的內容是這樣的:把一個字符串轉換爲JavaScript對象

{ 
    $t: "title: Test Title, gamelabel: Test Game, startdate: 2016-06-14" 
} 

有沒有把任何現成的貨架/簡單的方法這個字符串轉換成這種格式的JavaScript對象?

{ 
title : 'Test Title', 
gamelabel: 'Test Game', 
startdate: '2016-06-14 
} 

注意,密鑰必須動態(創建密鑰無論張的標題是),所以知道什麼鑰匙將在$t是不可能的。

更新:使用JSON.parse()並不在這裏工作,我想有通過這樣的哈克上下的方式:

var temp = {}; 
var params = $t.split(/:/g); 
for(var i = 0; i<params.length; i += 2){ 
    temp[params[i].trim()] = params[i + 1].trim(); 
} 

這實際上並不爲所提供的格式工作/是一個潛在的開始但我不知道這裏最好的做法是什麼。

+1

@RobG:No;那不是JSON。 – SLaks

+0

這看起來像'eval()' –

+0

工作我編輯了一個半碼示例到問題 – Jascination

回答

5

您可以split假設,:絕不會出現在鍵或值的部分容易解析它。

$t.split(',') 
    .map(s => s.split(':')) 
    .reduce((o, s) => { 
     o[s[0].trim()] = s[1].trim(); 
     return o; 
    }, {}); 
1

的關鍵是動態的,但結構必須保持相同的:

{ 
xxx: "abc", 
yyy: "bcd", ... 
} 

var str = "title: Test Title, gamelabel: Test Game, startdate: 2016-06-14"; 
var comaSplit = str.split(','), i, arr = [], obj = {}; 
for (i=0; i < comaSplit.length; i++) 
    arr.push(comaSplit[i].split(':')); 
for (i=0; i < arr.length; i++) 
    obj[arr[i][0]] = arr[i][1]; 
1

從電子表格採取JSON和分解,並建立它備份成對象

var originalData = { 
 
    "somerandomId" : "title: Test Title, gamelabel: Test Game, startdate: 2016-06-14", 
 
    "someotherId" : "title: Test Title2, gamelabel: Test Game2, startdate: 2216-06-14" 
 
}; 
 

 
var finalData = []; 
 

 
for (var key in originalData) { 
 
    var tmpData = {}; 
 

 
    originalData[key].split(",").forEach(function(item, index){ 
 
    var items = item.split(":"); 
 
    tmpData[items[0].trim()] = items[1].trim(); 
 
    }); 
 

 
    finalData.push(tmpData); 
 
} 
 

 
console.log(finalData);

1

如果您確信結構的陣列,然後分割對冒號和逗號分別使用reduce來創建對象:

var obj = {$t:'title: Test Title, gamelabel: Test Game, startdate: 2016-06-14'}; 
 

 
console.log(obj.$t.split(/[:,]/).reduce(function(acc, v, i, arr) { 
 
    if (i%2) acc[arr[i-1].trim()] = v.trim(); 
 
    return acc; 
 
    },{}));

或者,如果你到混淆代碼(不推薦)和ECMAScript 2015年環境(沒有得到廣泛的產品尚未推出):

var obj = {$t:'title: Test Title, gamelabel: Test Game, startdate: 2016-06-14'}; 
 
console.log(obj.$t.split(/[:,]/).reduce((acc,v,i,arr)=>i%2?(acc[arr[i-1].trim()]=v.trim())&&acc:acc,{}));

0

假設冒號和逗號有一種模式,你可以使用類似的東西:

t = "title: Test Title, gamelabel: Test Game, startdate: 2016-06-14" 
 
var rv = {}; 
 
for (var i = 0; i < t.split(/, /).length; ++i){ 
 
    rv[t.split(/, /)[i].split(/: /)[0]] = t.split(/, /)[i].split(/: /)[1]; 
 
} 
 
console.log(rv)