我正在调用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();
}
这实际上并不适用于提供的格式/可能是一个开始,但我不知道这里的最佳做法是什么。
答案 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)