我想知道如何使用lowdb
语法访问嵌套的JSON数组/对象?!
基本上我把这个结构作为lowdb
文件:
{
"57": {
"hour": [],
"day": [],
"week": [],
"month": []
},
"58": {
"hour": [],
"day": [],
"week": [],
"month": []
}
}
现在我想动态填充数组,但我无法将任何值推送到...
我的代码:
const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('myFile.json')
const db = low(adapter);
....
// add new object
db.set("57", { hour: [], day: [], week: [], month: [] }).write();
console.log(db.get('57').value().hour[0]); // prints ofc 'undefined'
console.log(db.get('57').value().hour); // prints [] which is correct
// both commands are not working | for test just push a single item
// later the item will be another object
// db.get('57').value().hour.push('item').write();
// db.get('57').hour.push('item').write();
// if copying first it's working well
var tmp = db.get('57').value().hour;
tmp.push('item');
console.log(tmp); // outputs [ 'item' ]
我觉得由于嵌套结构,lowdb无法实现这一点。如果可能,有人可以告诉我怎么做?
答案 0 :(得分:0)
好的,我以不同的方式帮助自己。
我的解决方法是,从lowdb
获取整个对象并将其复制到局部变量:
let arrayHour = db.get(item.ITEM_ID).value().hour;
let arrayDay = db.get(item.ITEM_ID).value().day;
let arrayWeek = db.get(item.ITEM_ID).value().week;
let arrayMonth = db.get(item.ITEM_ID).value().month;
然后以我需要的各种方式编辑数据:
// remove obsolete value
if (arrayHour.length >= 6)
arrayHour.splice(0, 1);
if (arrayDay.length >= 24)
arrayDay.splice(0, 1);
if (arrayWeek.length >= 7)
arrayWeek.splice(0, 1);
if (arrayMonth.length >= 30)
arrayMonth.splice(0, 1);
...
// add new values
arrayHour.push({name: item.NAME_DE, smkurs: item.SMKURS, ts: item.TS});
...
然后将整个集合推回lowdb
// put the values back
db.get(item.ITEM_ID).push({"hour": arrayHour, "day": arrayDay, "week": arrayWeek, "month": arrayMonth}).write();
这很好用,lowdb
不必处理嵌套对象。