如何将名称添加到未命名的 JSON 对象数组?

Posted

技术标签:

【中文标题】如何将名称添加到未命名的 JSON 对象数组?【英文标题】:How to add names to an array of unnamed JSON objects? 【发布时间】:2018-04-09 04:31:06 【问题描述】:

所以我目前正在使用 csvtojson 来将 csv 文件转换为 json,并且我的代码正在返回一个未命名对象的数组。但是,我希望这些对象被命名。更具体地说,我想使用第一列中的值来命名对象。

我的 CSV 文件如下所示:

名字、餐厅、食物名称、评论、价格

Andrew,Clucky's Chicken,Chickenator,这个三明治很棒,9.99 美元

米歇尔,字节,大汉堡,汉堡做得太好了,12.99 美元

Cam,Candyland,Yummy Gummies,散装糖果的好价钱,1.75 美元

我正在使用此代码并在节点中运行它:

// require the csvtojson converter class
var Converter = require("csvtojson").Converter;
//create a new converter object
var converter = new Converter();

//call the fromFile function which takes in the path to the csv file, as well as a callback function
converter.fromFile("./restaurants.csv", function(err,result)
  // if an error has occurred, then handle it
  if(err)
    console.log("An error has occurred");
    console.log(err);
  
  // create a variable called json and store the result of the conversion
  var json = result;

  // log our json to verify it has worked
  console.log(json);
);

返回:

[  'First Name': 'Andrew',
    'Restaurant': 'Clucky's Chicken', 
    'Food Name': 'Chickenator',
    'Comment': 'This sandwich is awesome',
    'Price': '$9.99' ,
   'First Name': 'Michelle',
    'Restaurant': 'Bytes', 
    'Food Name': 'Big Burger',
    'Comment': 'Burger was too well done',
    'Price': '$12.99' ,
   'First Name': 'Cam',
    'Restaurant': 'Candyland', 
    'Food Name': 'Yummy Gummies',
    'Comment': 'Good price for bulk candy',
    'Price': '$1.75'  ]

但我希望它返回更多类似于以下内容的内容:

[ Andrew :  'Restaurant': 'Clucky's Chicken', 
             'Food Name': 'Chickenator',
             'Comment': 'This sandwich is awesome',
             'Price': '$9.99' ,
  Michelle :  'Restaurant': 'Bytes', 
               'Food Name': 'Big Burger',
               'Comment': 'Burger was too well done',
               'Price': '$12.99' ,
  Cam :  'Restaurant': 'Candyland', 
          'Food Name': 'Yummy Gummies',
          'Comment': 'Good price for bulk candy',
          'Price': '$1.75'  ]

有人对我如何做到这一点有任何建议吗?

【问题讨论】:

外括号应该是卷曲的,而不是方形的。 Square 表示一个数组,它(通常)没有像property: "value" 这样的命名属性。 Curly 是一个对象,更适合您的需求。 哦,好的。在那种情况下,也许我根本不需要命名对象。谢谢你告诉我! 不客气。并且您不需要命名对象本身,具有名称作为键和值作为对象的对象的更多属性。 我不确定我是否完全理解其中的区别...... 我接受了 Stanley Cheung 的答案并稍加修改以使花括号出现在外面,所以我将其改为 var itemArray = [ ],而不是 var items = ... 我想我只是不知道命名对象和“以名称为键、值为对象的对象的属性”有什么区别 【参考方案1】:

制作一个自定义函数(因为您想将array 转换为map)。

function arrayToMap(array) 
  var map = ;

  array.map(
    (element) => 
      var firstName = element['First Name'];
      delete element['First Name'];
      map[firstName] = element;          
        
  );
  return map;

【讨论】:

由于某种原因,我无法让这个正常工作:(我尝试输入 console.log(map) 但没有显示任何内容。 Nit-picky:请注意,虽然您称它为“地图”,但它不是,它只是一个 ObjectMap is a new ES6 type.。解决方案当然是好的。 尝试用map替换forEach @msanford 没错,但我们可以object 视为一种映射,因为它可以通过键访问属性。这就是我将其称为地图的原因。 @AnteJablanAdamović 当然,我同意,并且我在评论前加上了公开的挑剔。我提到它只是为了完整性,因为 ES6 中存在 Map 类型。 :)【参考方案2】:

创建一个新数组itemArray,然后循环遍历数组中的所有项并将其推送到itemArray

var itemArray = []
a.map(item => 
    firstName = item["First Name"];
    delete item["First Name"];
    itemArray[firstName] = item;
)
console.log(itemArray); // <<<< you get the result here

【讨论】:

以上是关于如何将名称添加到未命名的 JSON 对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 命名属性反序列化为 .Net 对象

C#中json的命名空间是哪个,还要添加啥引用?

在 node.js 中重命名 json 对象名称

如何让 webflux 端点用每个项目的对象名称序列化 json

如何在spring boot中重命名json对象(变量)名称

如何将 JSON 字段名称映射到不同的对象字段名称?