【问题标题】:convert key value pair array to JSON [duplicate]将键值对数组转换为 JSON [重复]
【发布时间】:2020-11-26 21:16:45
【问题描述】:

我有一个函数可以扫描一个目录并为其中的所有文件夹及其各自的文件构建一个键值对。

const listNotes =  () => {
    const listing = [];
    try{
      const folders = fs.readdirSync(defaultPath);
      folders.forEach((folder) => {
        let v = fs.readdirSync(`${defaultPath}/${folder}`);
        listing[folder] = v;
      });

      
    } catch (err) {
      console.log(err);
    } 
    return listing;
  };

这是这种扫描的输出

[ DailyTask: [ 'Chores.json' , 'Sunday.json'] ]

这是一个名为 DailyTask 的文件夹,其中包含 2 个文件。

如何将此结构转换为 JSON。

【问题讨论】:

  • JSON.stringify(some_object_or_array)
  • 您的辅助 sn-p 不是有效的 javascript 对象表示法。
  • listing 是一个数组。数组不能有字符串索引。
  • 呃,我不太清楚你的意思。我的评论反映了 Code-Apprentice 所说的内容。 javascript 中的数组 ([]) 没有字符串索引。因此,如果这是一个对象,那么正确的对象表示法将是 { DailyTask: [ 'Chores.json', 'Sunday.json' ] }
  • const listing = {}; listing[<a variable>] = <a value>; 分配变量时不要使用{}。如果“键”是变量,则括号表示法用于数组和对象。

标签: javascript arrays json object


【解决方案1】:

listing 变量的问题在于它是一个ArrayJSON.stringify() 不包括数组中的所有键,只包括项目的顺序,例如listing[0]listing[1]。在您的情况下,您并没有真正使用 listing 作为数组,而是使用 is 作为对象。您可以将其设为object,然后当您调用JSON.stringify() 时,它将包含密钥。

解决方案

const listNotes =  () => {
    const listing = {};
    try{
      const folders = fs.readdirSync(defaultPath);
      folders.forEach((folder) => {
        let v = fs.readdirSync(`${defaultPath}/${folder}`);
        listing[folder] = v;
      });

      
    } catch (err) {
      console.log(err);
    } 
    return listing;

    //If you want to convert to JSON
    console.log(JSON.stringify(listing));
  };

【讨论】:

  • 谢谢,是的,那是我的错误
猜你喜欢
  • 2013-05-03
  • 2014-08-16
  • 2021-11-01
  • 2016-03-18
  • 2020-11-02
  • 2019-07-14
  • 2017-09-23
  • 2014-05-26
相关资源
最近更新 更多