2016-05-31 29 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)