处理JSON上的键名更改的最佳方法是什么?

时间:2020-09-10 07:43:43

标签: javascript json

我想知道是否有一种方法可以转换此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_())

3 个答案:

答案 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);

相关问题