diff --git a/aptpkginfo.cpp b/aptpkginfo.cpp
index b841795..de1a7fb 100644
--- a/aptpkginfo.cpp
+++ b/aptpkginfo.cpp
@@ -2,6 +2,7 @@
 #include <QFile>
 #include <QDir>
 #include <QDebug>
+#include <QJsonObject>
 
 AptPkgInfo::AptPkgInfo(QString pkgName, PkgSearchOption option)
 {
@@ -12,7 +13,7 @@ AptPkgInfo::AptPkgInfo(QString pkgName, PkgSearchOption option)
 
 void AptPkgInfo::ReadAptData()
 {
-    this->aptData = "";
+    this->aptData = QJsonObject();
     QDir dir("/var/lib/apt/lists/");
     QStringList list = dir.entryList();
     for(QString i: list) {
@@ -26,17 +27,19 @@ void AptPkgInfo::ReadAptData()
         QFile file(dir.path() + "/" + i);
         file.open(QFile::ReadOnly);
         // 分析
-        QString pkgData;
+        QJsonObject pkgData;
         pkgDataStatus status = pkgDataStatus::None;
+        QString strTemp;  // 因为直接 replace 会改变原来的值
         while(!file.atEnd()) {
             QByteArray line = file.readLine();
-            if(line.replace(" ", "").replace("\n", "") == "") {
+            strTemp = line;
+            if(strTemp.replace(" ", "").replace("\n", "") == "") {
                 // 空行
                 if(status == pkgDataStatus::IsContain) {
-                    aptData += pkgData + "\n";
+                    aptData.insert(pkgData.value("Package").toString(), pkgData);
                 }
                 status = pkgDataStatus::EmptyLine;
-                pkgData = "";  // 清空
+                pkgData = QJsonObject();  // 清空
                 continue;
             }
             // 如果已经被检测为非要寻找的包名,则
@@ -47,7 +50,8 @@ void AptPkgInfo::ReadAptData()
             if(line.contains("Package: ")) {
                 // 如果为包名行,则进行分析
                 // 是否含有要求关键字
-                QString pkgName = line.replace("Package: ", "").replace(" ", "").replace("\n", "");
+                strTemp = line;
+                QString pkgName = strTemp.replace("Package: ", "").replace(" ", "").replace("\n", "");
                 switch(this->pkgSearchOption) {
                 case PkgSearchOption::Equal:
                     if(pkgName == this->pkgName) {
@@ -66,15 +70,18 @@ void AptPkgInfo::ReadAptData()
                     }
                     break;
                 }
-                pkgData += line + "\n";
+                // 解析为 QJsonObject
+                pkgData.insert("Package", pkgName);
                 continue;
             }
             // 处理
-            pkgData += line + "\n";
+            int index = line.indexOf(":");
+            strTemp = line;
+            strTemp.replace("\n", "");
+            pkgData.insert(QString(strTemp.mid(0, index)), QString(strTemp.mid(index + 2)));
         }
         file.close();
     }
-    qDebug() << aptData;
 }
 
 void AptPkgInfo::SetPkgName(QString pkgName)
@@ -93,53 +100,34 @@ QString AptPkgInfo::GetPkgInfo(QString pkgName) const
     return this->GetCommandResult("apt", QStringList() << "list" << pkgName, env);
 }
 
-QString AptPkgInfo::get_package() const
+QString AptPkgInfo::get_package(QString pkgName) const
 {
-    QStringList list = pkgInfo.split("\n");
-    for(QString i: list) {
-        if(i.contains("Package: ")) {
-            return i.replace("Package: ", "").replace(" ", "");
-        }
-    }
-    return NULL;
+    return this->aptData.value(pkgName).toObject().value("Package").toString();
 }
 
-QString AptPkgInfo::get_version() const
+QString AptPkgInfo::get_version(QString pkgName) const
 {
-    QStringList list = pkgInfo.split("\n");
-    for(QString i: list) {
-        if(i.contains("Maintainer: ")) {
-            return i.replace("Maintainer: ", "").replace(" ", "");
-        }
-    }
-    return NULL;
+    return this->aptData.value(pkgName).toObject().value("Version").toString();
 }
 
-QString AptPkgInfo::get_maintainer() const
+QString AptPkgInfo::get_maintainer(QString pkgName) const
 {
-    QStringList list = pkgInfo.split("\n");
-    for(QString i: list) {
-        if(i.contains("Version: ")) {
-            return i.replace("Version: ", "").replace(" ", "");
-        }
-    }
-    return NULL;
+    return this->aptData.value(pkgName).toObject().value("Maintainer").toString();
 }
 
-QStringList AptPkgInfo::GetAptPackageList(QString name) const
+QString AptPkgInfo::get_description(QString pkgName) const
 {
-    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-    env.insert("LANG", "en");
-    QString data = GetCommandResult("apt", QStringList() << "list" << name, env);
-    QStringList lineData = data.split("\n");
-    QStringList result = {};
-    for(QString i: lineData) {
-        if(i.contains("Listing...")) {
-            continue;
-        }
-        result.append(i.split("/").at(0));
-    }
-    return result;
+    return this->aptData.value(pkgName).toObject().value("Description").toString();
+}
+
+QString AptPkgInfo::get_architecture(QString pkgName) const
+{
+    return this->aptData.value(pkgName).toObject().value("Architecture").toString();
+}
+
+QStringList AptPkgInfo::GetAptPackageList() const
+{
+    return this->aptData.keys();
 }
 
 QByteArray AptPkgInfo::GetCommandResult(QString command, QStringList argv, QProcessEnvironment env) const
diff --git a/aptpkginfo.h b/aptpkginfo.h
index cd85bd5..d75ddd4 100644
--- a/aptpkginfo.h
+++ b/aptpkginfo.h
@@ -3,6 +3,7 @@
 
 #include <QObject>
 #include <QProcess>
+#include <QJsonObject>
 
 class AptPkgInfo: QObject
 {
@@ -16,21 +17,23 @@ public:
     AptPkgInfo(QString pkgName, PkgSearchOption option = PkgSearchOption::Equal);
 
     void SetPkgName(QString pkgName);
-    QStringList GetAptPackageList(QString name) const;
+    QStringList GetAptPackageList() const;
     QByteArray GetCommandResult(QString command, QStringList argv, QProcessEnvironment env = QProcessEnvironment::systemEnvironment()) const;
 
     QString GetPkgInfo(QString pkgName=NULL) const;
 
-    QString get_package() const;
-    QString get_version() const;
-    QString get_maintainer() const;
+    QString get_package(QString pkgName) const;
+    QString get_version(QString pkgName) const;
+    QString get_maintainer(QString pkgName) const;
+    QString get_description(QString pkgName) const;
+    QString get_architecture(QString pkgName) const;
 
 
 
 private:
     QString pkgName;
     QString pkgInfo;
-    QString aptData;
+    QJsonObject aptData;
     PkgSearchOption pkgSearchOption = PkgSearchOption::Equal;
 
     enum pkgDataStatus {
diff --git a/kernelinformation.cpp b/kernelinformation.cpp
index 5cba1e9..13d8470 100644
--- a/kernelinformation.cpp
+++ b/kernelinformation.cpp
@@ -16,35 +16,21 @@ void KernelInformation::LoadInfo()
 
     }*/
     AptPkgInfo info = AptPkgInfo("linux-", AptPkgInfo::PkgSearchOption::Include);
+    QStringList list = info.GetAptPackageList();
     QJsonArray array;
-    QStringList list = info.GetAptPackageList("linux-base");
     for(QString i: list) {
         QJsonObject object;
         info.SetPkgName(i);
         object.insert("Name", i);
-        object.insert("Author", info.get_maintainer());
+        object.insert("Author", info.get_maintainer(i));
+        object.insert("Des", info.get_maintainer(i));
+        object.insert("Arch", info.get_architecture(i));
         array.append(object);
+        qDebug() << object;
     }
     this->listData = array;
     emit loadFinished(NULL);
-    return;
-    // 从 Github 拉取信息
-    QUrl url(this->url);
-    QUrlQuery query;
-    query.addQueryItem("format", "j1");
-    url.setQuery(query.toString(QUrl::FullyEncoded));
-    qDebug() << url;
-    QNetworkRequest request(url);
-    QNetworkAccessManager *m_http = new QNetworkAccessManager(this);
-    QNetworkReply *reply = m_http->get(request);
-    connect(reply, &QNetworkReply::finished, this, [this, m_http](){
-        QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
-        QByteArray data = reply->readAll();
-        qDebug() << data;
-        qDebug() << reply->error();
-        this->listData = QJsonDocument::fromJson(data).array();
-        emit loadFinished(reply);
-    });
+
 }
 
 QJsonArray KernelInformation::get_listData() const
diff --git a/mainwindow.cpp b/mainwindow.cpp
index d29e845..023543c 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -42,6 +42,9 @@ void MainWindow::RefreshKernelListView(KernelInformation *info, bool showLocalAr
             if(i == arch) {
                 isLocalArch = true;
             }
+            if(i == "all") {
+                isLocalArch = true;
+            }
             kernelArch += i + " ";
         }
         if(showLocalArchOnly && !isLocalArch) {
@@ -50,7 +53,7 @@ void MainWindow::RefreshKernelListView(KernelInformation *info, bool showLocalAr
         model->setItem(line, 0, new QStandardItem(QString::number(i)));
         model->setItem(line, 1, new QStandardItem(info->get_name(i)));
         model->setItem(line, 2, new QStandardItem(info->get_author(i)));
-        //model->setItem(line, 3, new QStandardItem(kernelArch));
+        model->setItem(line, 3, new QStandardItem(kernelArch));
         //model->setItem(line, 4, new QStandardItem((QStringList() << "" << "Y").at(info->get_installedAlready(i))));
         line++;
     }