下面为books.json格文件的数据

[{
    "id": 1,
    "bookName": "完美世界",
    "author": "辰东",
    "hero": "石昊"
}, {
    "id": 2,
    "bookName": "武庚纪",
    "author": "沈乐平",
    "hero": "武庚"
}, {
    "id": 4,
    "bookName": "天行九歌",
    "author": "陈岚",
    "hero": "韩非"
}]

下面为books.js文件的数据

// 实现对json数据的增删改查
// 先引入所需的模块
let { join } = require('path')
let { readFile, writeFile } = require('fs')
const { json } = require('stream/consumers')
// 拼接json文件的绝对路径
let filePath = join(__dirname, 'books.json')

// 查询数据 --> 其实就是查询文件的内容
function query() {
    // err为错误 data为查询到的数据
    // 当没有错误时,err为空对象,有错误时,err内是错误信息
    readFile(filePath, 'utf-8', (err, data) => {
        // 如果有错误就抛出错误信息,并不再向下执行
        if (err) throw err
        // 将获取到的字符串数据转为对象类型
        let res = JSON.parse(data)
        console.log(res) // 查询到的数据
    })
}
// query()

// 增加数据
function add(obj) {
    readFile(filePath, 'utf-8', (err, data) => {
        if (err) throw err
        let res = JSON.parse(data)
        // 需要得到id,id为数组中最后一个图书的id+1
        let index = res[res.length - 1].id + 1
        // 向obj对象中添加id属性
        obj.id = index
        res.push(obj)
        // 写入到json文件中 --> 需要把res转为字符串写入到json文件
        writeFile(filePath, JSON.stringify(res), err => {
            if (err) throw err
            console.log('添加成功')
        })
    })
}
// add({ bookName: "斗罗大陆", author: "唐家三少", hero: "唐三" })

// 修改数据   --> 其实就是把原数据删除,把修改的数据放进去
// 根据图书id修改
function upData(obj) {
    readFile(filePath, 'utf-8', (err, data) => {
        if (err) throw err
        let res = JSON.parse(data)
        // 使用数组的splice方法
        // splice(索引,删除的个数,新增的数据)
        // 可以用数组的findIndex方法获取索引
        // findIndex(item =>return 条件) 返回符合条件的数据的索引
        let index = res.findIndex(item => obj.id === res.id)
        res.splice(index, 1, obj)
        writeFile(filePath, JSON.stringify(res), err => {
            if (err) throw err
            console.log('修改成功')
        })
    })
}
// 修改id为3的图书信息为:天官赐福、墨香铜臭、谢怜
// upData({ id: 3, bookName: "天官赐福", author: "墨香铜臭", hero: "谢怜" })

// 删除数据
// 根据图书的id删除对应的数据
function del(id) {
    readFile(filePath, 'utf-8', (err, data) => {
        if (err) throw err
        let res = JSON.parse(data)
        // 数组的filter方法可以返回满足筛选条件的结果
        let r = res.filter(item => {
            // 只有当图书的id不为3,才返回结果
            return id !== item.id
        })
        writeFile(filePath, JSON.stringify(r), err => {
            if (err) throw err
            console.log('删除成功')
        })
    })
}
// 删除图书id为3的数据
del(3)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐