我想知道是否有一种方法可以转换此JSON,而不是使用“ 2020-07-06” 作为关键字,而我们需要一个字段 date:“ 2020-07-06” 。它的数据集很大,所以我无法手动更改传送。
from PyQt5 import QtWidgets, QtSql
queries = (
"""
CREATE TABLE IF NOT EXISTS details(
title TEXT,
first_name TEXT,
last_name TEXT,
mobile TEXT,
designation TEXT
)""",
"""
CREATE TABLE IF NOT EXISTS view(
full name TEXT,
mobile TEXT,
designation TEXT)
""",
"""
CREATE TRIGGER IF NOT EXISTS after_insert_details
AFTER INSERT
ON details
BEGIN
INSERT INTO view(full, mobile, designation)
VALUES(NEW.first_name || " " ||New.last_name , NEW.mobile, NEW.designation);
END;""",
"""
CREATE TRIGGER IF NOT EXISTS after_update_details
AFTER UPDATE
ON details
BEGIN
UPDATE view
SET full = NEW.first_name || " " ||New.last_name , mobile = NEW.mobile, designation = NEW.designation
WHERE NEW.rowid = rowid;
END;
""",
"""
CREATE TRIGGER IF NOT EXISTS after_delete_details
AFTER DELETE
ON details
BEGIN
DELETE FROM view
WHERE OLD.rowid = rowid;
END;
"""
)
def create_connection():
db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("employee.db")
if not db.open():
print(db.lastError().text())
return False
return True
class ReadOnlyDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, parent, option, index):
pass
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.title_combo = QtWidgets.QComboBox()
self.title_combo.addItems(["Mr.", "Ms."])
self.first_name_line = QtWidgets.QLineEdit()
self.last_name_line = QtWidgets.QLineEdit()
self.mobile_line = QtWidgets.QLineEdit()
self.desig_line = QtWidgets.QLineEdit()
self.save_btn = QtWidgets.QPushButton("Save")
self.detail_view = QtWidgets.QTableView()
self.detail_model = QtSql.QSqlTableModel()
self.detail_model.setTable("details")
self.detail_model.select()
self.detail_view.setModel(self.detail_model)
self.table_view = QtWidgets.QTableView()
self.view_model = QtSql.QSqlTableModel()
self.view_model.setTable("view")
self.view_model.select()
self.table_view.setModel(self.view_model)
self.table_view.setItemDelegate(ReadOnlyDelegate(self.table_view))
form_widget = QtWidgets.QWidget()
form_layout = QtWidgets.QFormLayout(form_widget)
form_layout.addRow("Title", self.title_combo)
form_layout.addRow("First Name", self.first_name_line)
form_layout.addRow("Last Name", self.last_name_line)
form_layout.addRow("Mobile", self.mobile_line)
form_layout.addRow("Designation", self.desig_line)
form_layout.addRow(self.save_btn)
form_widget.setFixedSize(form_widget.sizeHint())
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
hlay1 = QtWidgets.QHBoxLayout()
hlay1.addWidget(form_widget)
hlay1.addStretch()
hlay2 = QtWidgets.QHBoxLayout()
hlay2.addWidget(self.detail_view)
hlay2.addWidget(self.table_view)
vboxlayout = QtWidgets.QVBoxLayout(central_widget)
vboxlayout.addLayout(hlay1)
vboxlayout.addLayout(hlay2)
self.resize(640, 480)
self.save_btn.clicked.connect(self.insert_row)
def insert_row(self):
r = self.detail_model.record()
r.setValue("title", self.title_combo.currentText())
r.setValue("first_name", self.first_name_line.text())
r.setValue("last_name", self.last_name_line.text())
r.setValue("mobile", self.mobile_line.text())
r.setValue("designation", self.desig_line.text())
self.detail_model.insertRecord(-1, r)
self.detail_model.select()
self.view_model.select()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
if not create_connection():
sys.exit(-1)
for query_str in queries:
query = QtSql.QSqlQuery(query_str)
if not query.exec_():
print(query.lastError().text())
w = MainWindow()
w.show()
sys.exit(app.exec_())
答案 0 :(得分:1)
键必须是唯一的,因此解决此问题的唯一干净方法是使用数组。这里有一个解决方案的示例:
const input = {
"2020-07-06": {
"food": {
},
},
"2020-07-07": {
"food": {
},
},
"2020-07-08": {
"food": {
},
},
}
const res = Object.keys(input).map((key) => {
return {
food: input[key].food,
date: key
}
});
console.log(res)
答案 1 :(得分:1)
您可以使用Object.entries,然后在其上映射以创建数组
const old = {
"2020-07-06": {
"food": {
},
},
"2020-07-07": {
"food": {
},
},
"2020-07-08": {
"food": {
},
},
}
const newArray = Object.entries(old).map(([key, valueObject]) => {
return { date: key, ...valueObject }
})
console.log(newArray)
答案 2 :(得分:-1)
看看这个片段。猜猜这是一种开始。
const old = {
"2020-07-06": {
"food": {
},
},
"2020-07-07": {
"food": {
},
},
"2020-07-08": {
"food": {
},
},
}
const obj = Object.keys(old).map(e => {
let res = old[e]
res.date = e;
return res;
});
console.log(obj);