1. 程式人生 > >Json對一對多型別的多行資料儲存解決方案

Json對一對多型別的多行資料儲存解決方案

         接著上面的那個資料儲存問題,今天我靈機一動,發現,Json是可以儲存多行資料的,只不過表現形式和資料庫的那種多行儲存是不一樣的,真是把我高興壞了,下面我來出解決方案。

        首先,我來說一下我們要實現的功能就是要儲存學生的各種資訊,有學生的學號,然後有學生性別,姓名,專業名稱,喜好的圖書種類。那麼在這裡,學生的學號就是每一行(這裡說的一行就是指學生的所有屬性行)資訊的主要Key,因為這個是不可重複的。

        那麼,這個問題的大體思路就是,我們建立一個Save類,然後宣告一些屬性,包括學生的學號等等資訊,下面就是關鍵了,我們最關鍵的一步就是把學生的這些屬性宣告成集合,那麼這樣的話,集合就可以儲存一列的值了。

        經過在下的試驗,這個方法是可行的,如下Save類:

然後再隨便在一個指令碼上寫一個方法來例項化這個Save物件,並且利用LitJson去獲取之前的資料,然後對Save物件新增新資料。如下指令碼:

public Save SaveStuInfo(){

        Save save = new Save ();
        //新增新加入的資訊


        //save.stuID.Add("");
        //save.stuName.Add("");
        //save.stuSex.Add("");
        //save.stuProfessional.Add("");
        //save.stuBooks.Add("");
        //return save;
        string filePath = Application.dataPath + "/Res/StuInfoJson.json";
        if (File.Exists(filePath)) {
            //獲得已經存在的資訊
            StreamReader sr=new StreamReader(filePath);
            string jsonStr = sr.ReadToEnd ();

            sr.Close();
            save = JsonMapper.ToObject<Save> (jsonStr);
            if (save.stuID [save.stuID.Count - 1] == "") {
                save.stuID [save.stuID.Count - 1] = stuInfoText [0].text;
                save.stuName [save.stuName.Count - 1] = stuInfoText [1].text;
                save.stuSex [save.stuSex.Count - 1] = stuInfoText [2].text;
                save.stuProfessional [save.stuProfessional.Count - 1] = stuInfoText [3].text;
                save.stuBooks [save.stuBooks.Count - 1] = stuInfoText [4].text;
                print ("執行了if");
                save.stuID.Add("");
                save.stuName.Add("");
                save.stuSex.Add("");
                save.stuProfessional.Add("");
                save.stuBooks.Add("");
            
        }

        return save;

    }

這裡面呢,我加了“”空字串來做標誌位,大家有好的方法也可以用,我這個相對比較麻煩,而且還要手動去調最開始的值,不知道為什麼最開始的時候出現了空引用,所以我用了這個空字串作為標誌位。

然後就是寫Json資料了:

Save save=gameController.SaveStuInfo();
            string filePath=Application.dataPath+"/Res/StuInfoJson.json";
            string saveJsonStr= JsonMapper.ToJson (save);
            //StreamWriter是專門的寫入流,是真正去寫入的媒介,相當於寫東西的筆
            //這個筆寫東西,當然是在引數上寫的是要寫入的內容路徑
            //然後用Write方法去真正寫入內容
            StreamWriter sw = new StreamWriter (filePath);
            sw.Write (saveJsonStr);
            sw.Close ();
            print ("寫入json資料成功");

這個相對比較簡單,就不多說了,大概內容就是把那個存了老資料和新資料的新Save物件寫進Json檔案裡面,從而達到了永久多行儲存的效果。

大家如果有更好的用Json來儲存多行資料的方法,歡迎交流!!

相關推薦

Json一對多型別資料儲存解決方案

         接著上面的那個資料儲存問題,今天我靈機一動,發現,Json是可以儲存多行資料的,只不過表現形式和資料庫的那種多行儲存是不一樣的,真是把我高興壞了,下面我來出解決方案。         首先,我來說一下我們要實現的功能就是要儲存學生的各種資訊,有學生的學號,

瀏覽器本地資料儲存解決方案以及cookie的坑

本地資料儲存解決方案以及cookie的坑 問題: cookie過長導致頁面開啟失敗 背景: 在公司的專案中有一個需求是開啟多個工單即在同一個頁面中打開了多個tab(iframe),但是需要在重新整理時只重新整理當前頁面仍然保留著多個iframe,現在重新整理有兩種方式,第一種是鍵盤中按F5或者ctrl

MyCat分片-海量資料儲存解決方案

說到MyCat分片,首先我們要了解的是什麼是分片 簡單來說,就是指通過某種特定的條件,將我們存放在同一個資料庫中的資料分散存放到多個數據庫(主機)上面,以達到分散單臺裝置負載的效果。 資料的切分(Sharding)根據其切分規則的型別,可以分為兩種切分模式。 (1)一種是按照不同的表

自定義銷售屬性的展示和資料儲存解決方案

我的資料表設計如下 由 Product表, SellProperty表和SKU表三張表來支援該功能. 表結構如下: CREATE TABLE `purchaser_product` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `product_code` v

oracle一個表的資料進行修改

1、第一種使用迴圈修改表 --遍歷一個表並作修改 declare bl varchar(100); --宣告一個字串變數 BEGIN FOR L_RECORD IN (select * from ys

GridView中存在資料,如何獲取資料表主鍵值以某一整資料進行編輯

 <%-- asp.net初學者,還請大神多多提點--%> 程式碼如下: protected void grvMHN_RowEditing(object sender, GridViewE

C++輸入資料

動機 程式設計題常用需求,比如輸入兩行資料。 解決思路:使用getline 程式 #include <iostream> #include <vector> #include <string> #include <algorithm> using na

資料合併成一行

需求:在大資料平臺maxcompute上統計各個等級對應的人數,欄位大致如下 CREATE TABLE `XXXX` ( `requestid` char(32) DEFAULT NULL, `id` char(32) NOT NULL, `createtime` varchar

YII2 一次性往資料庫插入資料

/** * 插入統計資料 */ public static function insertCountData(array $InsertData) { $transition = Yii::$app->db->beginTransaction(); try

199. mysql 將資料用逗號連線返回一個字串

1.需求 我們有時候會將多行資料進行合併顯示(Java 使用迴圈處理 有點麻煩  現在直接在sql中處理) 2.效果 3. 表結構 及sql 查詢 使用者角色中間表 角色表 表關係 --3. 我們需要 分組查詢  使用GROUP_CONCAT 函式

一條sql插入資料mysql和oracle的不同寫法

轉載出處: 由於要將mysql資料庫轉為oracle,mybatis的對映檔案裡面的批量插入用的mysql的多個values的形式,但是換成oracle庫之後sql報錯。所以.oracle並不支援這種一個insert into 多個values的方法 mysql:INSE

C++從鍵盤輸入資料

遇到很多筆試題不是事先留好的介面寫函式,而需要自己從鍵盤輸入多行資料。 下面是利用C++類從鍵盤獲取資料: #include <iostream> using namespace std; class Node { public: int a;

python 向excel中寫入資料

python 向excel中寫入多行資料 xlwt 可以將資料存入excel中,常見的操作有建立工作薄,表單,寫入value,和儲存等 但是對寫入多行資料來說,迴圈遍歷每一行每一列寫入value,為了便於閱讀,可以把每一列的欄位加入一個列表中,通過下標讀取 import xlwt

oracle 如何將資料進行合併(用LISTAGG!!!)

LISTAGG(列名,' 分割符號') oracle 11g 以上的版本才有的一個將指定列名的多行查詢結果,用 指定的分割符號 合併成一行顯示: 例如: 表原始資料: 需求:將 mb1_Transport_License_list 表中的資料,根據 transpo

mysql帶條件的字串拼接,資料合併一行顯示,取前幾位

我原來通過group by 進行分組然後利用GROUP_CONCAT GROUP_CONCAT(s3.name) 獲取到了一串人名 現在要判斷如果裡面的人多餘三個就只顯示三個人其他用...號顯

通過後臺SQL獲取分頁資料,在使用VUE-Element-Table 表格選擇資料時,怎樣在

在專案中,分頁是由後臺SQL獲取。在table表格多選時,容易把選中的值傳給後臺,但是怎樣在返回上一頁時怎樣記住表格多選的資料?? 當返回第二頁時,應該把第一條資料再選中,保持選擇狀態。 具體思路:在頁面不重新重新整理載入時,使用二維陣列儲存el-table表格多選結果。其中一維

mysql逗號分隔字串成資料

最近迷上將夜,就用主角做栗子了。 轉換後: SQL程式碼 select substring_index(substring_index(a.userIds,',',b.help_topic_id+1),',',-1) id, substring_index(substring_i

【SQL】ORACLE更新資料,利用decode函式,對應關係,改資料

需求如下: 資料庫如下: 要求上面移動,資料庫作對應改變。。。用decode函式,可以一條SQL改變三條語句。 實際執行SQL如下: UPDATE CC_SYS_FRAME SET FRAME_LEVEL = decode(FRAME_NAME, '裝置',1 ,

mybatis返回資料

xml對映 <mapper namespace="com.yihaomen.mybatis.models.UserMapper"> <resultMap type="User" id="UserList"><result property="i

用一條insert語句來插入資料

MySQL資料庫: INSERT INTO STUDENT (SNAME, SSEX, SAGE, SDEPT) SELECT '武耀旭','男',24,'CS' UNION SELECT '張志鵬','男',24,'CS' UNION SELECT '朱文輝','男',2