如何格式化JSON对象键/值对

时间:2015-08-26 04:47:02

标签: json node.js

我是nodejs的新手,现在我能够从数据库中获取数据并显示为具有键/值对的REST API。我的输出如下所示

[{"id":"793","actionname":"test_bsc_interface","actionid":"100"}].

但我需要格式化为

{ "header" : [id,actionname,actionid],

  "values" : [793 ,test_bsc_interface,100] ],}.

我尝试使用JSON.stringfy并检查了几个网站,但它无效。

任何人都可以通过我应该经历或接近的链接来帮助我。

1 个答案:

答案 0 :(得分:2)

执行此操作的简便方法是使用underscorelodash模块对其进行格式化:

var _ = require('lodash');

var data = [{"id":"793","actionname":"test_bsc_interface","actionid":"100"}];
var result = _.map(data, function(o) {
  return {headers: _.keys(o), values : _.values(o)}
});
console.dir(result);

输出是:

[ 
  { 
    headers: [ 'id', 'actionname', 'actionid' ],
    values: [ '793', 'test_bsc_interface', '100' ] 
  } 
]

要获得所需的结果,只需执行结果[0]

请注意,我使用_.map()而不是data [0],因为这将适用于具有多个项目的数组(来自查询的数组结果)。

根据您的评论修改答案(1个标题行和数组中的所有值行):

var _ = require('lodash');

var data = [
  { id: '714', actionname: 'test_bsc_interface', actionid: '100' },
  { id: '715', actionname: 'list_all_available_interfaces', actionid: '103' },
  { id: '716', actionname: 'check_tt', actionid: '101' }
];

var result;

if (_.size(data) > 0) {
  result = {
    headers: _.keys(data[0]),
    values: _.map(data, function(o) {
      return _.values(o);
    })
  };
}

console.dir(result);

,输出为:

{ 
  headers: [ 'id', 'actionname', 'actionid' ],
  values: [ 
    [ '714', 'test_bsc_interface', '100' ],
    [ '715', 'list_all_available_interfaces', '103' ],
    [ '716', 'check_tt', '101' ] 
  ] 
}