JSON文件数据的增删改查

第一步:创建json文件

[
    {
        "id": 1,
        "bookname": "西游记",
        "author": "吴承恩",
        "publisher": "北京出版社"
    },
    {
        "id": 3,
        "bookname": "红楼梦",
        "author": "曹雪芹",
        "publisher": "上海出版社"
    },
    {
        "id": 6,
        "bookname": "三国演义",
        "author": "罗贯中",
        "publisher": "清华出版社"
    },
    {
        "id": 8,
        "bookname": "斗破苍穹",
        "author": "土豆",
        "publisher": "仙侠出版社"
    },
    {
        "bookname": "朝花夕拾",
        "author": "鲁迅",
        "publisher": "北京出版社",
        "id": 10
    },
    {
        "bookname": "朝花夕拾",
        "author": "鲁迅",
        "publisher": "北京出版社",
        "id": 11
    }
]

第二步:开始增删改查

// 对JSON文件中的数据,进行增删改查操作。

// 拼接 db.json 文件的路径
let { join } = require('path');
let filename = join(__dirname, 'db.json'); // 得到db.json的绝对路径

let { readFile, writeFile } = require('fs'); // 解构出并加载fs模块中的两个方法

// ------------------------------ 查询:获取json文件中的数据 --------------------------
function query() {
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err;
    let res = JSON.parse(data); // 把JSON转成JS数组
    console.log(res);
  })
}
// query();


// ------------------------------ 添加:向json文件中添加数据 --------------------------
// row 新增的图书,格式 { bookname: '史记', author: '司马迁', publisher: '北京出版社' }
function add(row) {
  // 1. 先读取,得到全部的图书(转为数组)
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err;
    let res = JSON.parse(data);
    // 2. 把新书加入进去
    let id = res[res.length - 1].id + 1;//id为数组中最后一个数据的id+1
    row.id = id;//把实参传来的数据条加上上面取好的id

    res.push(row);//新加入的那条数据放到数组最后面
    // console.log(res);
    // 3. 把全部的图书,重新写入到 db.json 中
    writeFile(filename, JSON.stringify(res), err => {
      if (err) throw err;
      console.log('添加成功')
    })
  })
}

//add({ bookname: '朝花夕拾', author: '鲁迅', publisher: '北京出版社' });

// ------------------------------ 删除:从json文件中删除数据 --------------------------
// 参数:id
function del(id) { // 函数名不能叫做delete,因为delete是一个关键字
  // 1. 获取全部数据
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err;
    let res = JSON.parse(data);
    // console.log(res);
    // 2. 根据条件删除一本书
    let result = res.filter(item => {
      return item.id != id;
    });
    // 3. 把剩余的图书重新存起来
    writeFile(filename, JSON.stringify(result), err => {
      if (err) throw err;
      console.log('删除成功')
    })
  })
}
// del(9);


// ------------------------------ 修改:修改json文件中的一条数据 --------------------------
function update(row) {
  // 1. 先把所有数据取出来
  readFile(filename, 'utf-8', (err, data) => {
    if (err) throw err;
    let res = JSON.parse(data);
    // console.log(res);
    // 2. 修改
    // 先根据添加找到索引
    let index = res.findIndex(item => item.d == row.id);
    // 从索引的位置开始,删除1条数据,并且把新的 row 加入
    res.splice(index, 1, row);
    // 3. 再把全部数据重新存起来
    writeFile(filename, JSON.stringify(res), err => {
      if (err) throw err;
      console.log('修改成功')
    });
  })
}

// update({ id: 8, bookname: '斗破苍穹', author: '土豆', publisher: '仙侠出版社' });

注:步骤2中的函数均已注释调用,大家可以根据需求清除注释使用.

你可能感兴趣的:(json,javascript,vue.js)