在我的Node.js应用程序中,我有一些难看的数据:
{"rn":["801"],"destSt":["30089"],"destNm":["95th/Dan Ryan"],"trDr":["5"],"nextStaId":["41430"],"nextStpId":["30276"],"nextStaNm":["87th"],"prdt":["20151003 12:36:48"],"arrT":["20151003 12:38:48"],"isApp":["0"],"isDly":["0"],"flags":[""],"lat":["41.75042"],"lon":["-87.62518"],"heading":["179"]}
正如您所看到的,每个对象属性都莫名其妙地包含一个数组,其值应该直接是该属性的值。
我希望将所有内容都移到一个级别,以便它看起来像:
{"rn":"801","destSt":"30089","destNm":"95th/Dan Ryan"}
(等)
在任何情况下,任何这些数组都不会包含任何多个值。
最好的方法是什么?我尝试过下划线,但没有成功。
而且我不确定如何去搜索谷歌。 :)
答案 0 :(得分:0)
一种方法是使用JSON reviver函数来修改值。这样做的好处是它也可以遍历嵌套对象。
JSON.parse(data, function(key, value) {
if (Array.isArray(value)) {
value = value[0];
}
return value;
});
答案 1 :(得分:0)
试试这个:
var obj = {"rn":["801"],"destSt":["30089"],"destNm":["95th/Dan Ryan"],"trDr":["5"],"nextStaId":["41430"],"nextStpId":["30276"],"nextStaNm":["87th"],"prdt":["20151003 12:36:48"],"arrT":["20151003 12:38:48"],"isApp":["0"],"isDly":["0"],"flags":[""],"lat":["41.75042"],"lon":["-87.62518"],"heading":["179"]},
newObj = Object.keys(obj).reduce(function(result, item){
result[item] = obj[item][0];
return result;
}, {});
答案 2 :(得分:0)
迭代键并更改其值:
Object.keys(obj).forEach(key => obj[key] = obj[key][0])
这会修改对象。如果您更愿意创建另一个对象
function unarrayize(obj) {
var result = {};
for (var k in obj) result[k] = obj[k][0];
return result;
}
如果你想使用下划线:
_.mapObject(obj, function(val) { return val[0]; })
答案 3 :(得分:0)
我可能误导了数据的复杂性(我假设我可以只针对每个数据进行挑选并挑选出来。)
真的,我的数据是包含一组包含属性的列车的路线集。我发布的数据只是火车一条路线的数据。
所以我这样做了:
_.each(routes,function(route, rt_index, list) {
_.each(route, function (train, train_index,list){
_.each(train, function (property, property_index,list){
routes[rt_index][train_index][property_index] = property[0];
});
});
});
虽然我确信有更清洁的方式。
答案 4 :(得分:-1)
以下是使用查询字符串核心模块执行此操作的方法:
var qs = require('querystring');
var obj = {"rn":["801"],"destSt":["30089"],"destNm":["95th/Dan Ryan"],"trDr":["5"],"nextStaId":["41430"],"nextStpId":["30276"],"nextStaNm":["87th"],"prdt":["20151003 12:36:48"],"arrT":["20151003 12:38:48"],"isApp":["0"],"isDly":["0"],"flags":[""],"lat":["41.75042"],"lon":["-87.62518"],"heading":["179"]};
var newObj = qs.parse(qs.stringify(obj));
可能不是最好的方式,但它可以满足您的需求。