将字符串转换为javascript对象

时间:2016-05-31 02:37:42

标签: javascript

我正在调用Google表格API中的数据,每行的内容如下所示:

 {
   $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(); 
 }

这实际上并不适用于提供的格式/可能是一个开始,但我不知道这里的最佳做法是什么。

5 个答案:

答案 0 :(得分:5)

您可以使用split轻松解析,假设,并且:永远不会出现在键或值部分。

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

答案 1 :(得分: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];

答案 2 :(得分: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);

答案 3 :(得分: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,{}));

答案 4 :(得分: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)