如何显示带有{“ id”:“ value”}而不是{“ col1”:“ id”,“ col2:” value“}的json对象

时间:2018-08-15 16:17:56

标签: mysql json

因此,我正在使用languages.js.org和一个名为ft_mainft_lang的数据库进行多语言站点的翻译,该数据库包含2列:id,en。

使用JSON,我可以这样从数据库中显示JSON对象:

{"id":"1","en":"First translation"},
{"id":"2","en":"Second translation"},
{"id":"3","en":"Third translation"},
...

但是language.js不会以上述对象格式运行,它将以这种格式运行:

{"1":"First translation"},
{"2":"Second translation"},
{"3":"Third translation"},
...

那么如何使用JSON从数据库中显示上述格式的对象?

2 个答案:

答案 0 :(得分:1)

您只需要遍历数组并创建一个像这样的新数组:

var data = [
{"id":"1","en":"First translation"},
{"id":"2","en":"Second translation"},
{"id":"3","en":"Third translation"}];
var newData = [];
data.forEach(function(obj) {
  var newObj = {};
  newObj[obj.id] = obj.en;
  newData.push(newObj);
});
console.log(newData);

答案 1 :(得分:1)

您可以使用map来简化代码:

var data = [
  {"id":"1","en":"First translation"},
  {"id":"2","en":"Second translation"},
  {"id":"3","en":"Third translation"}];
var newData = data.map(obj => ({[obj.id]: obj.en}));
console.log(newData);

说明:

  • data.map(fn)将函数fn应用于data数组中的每个元素,并以相同大小的数组返回结果。
  • obj => ({[obj.id]: obj.en})是一种转换,它接受obj并返回一个包含单个属性的对象,其中以obj.id作为键,而obj.en作为值。
    • 这就是将{"id": "foo", "en": "bar"}变成{"foo": "bar"}的原因。
    • 外部()是必需的,因为否则JavaScript会尝试将{}中的内容视为函数。
    • []obj.id附近是必需的,因此解析器知道整个密钥是obj.id而不是obj