1. 程式人生 > >各種資料轉換整理總結

各種資料轉換整理總結

前提:這段時間剛剛開始做前端的一些工作,對資料的轉換會比較亂一點,在這裡記錄下關於資料轉換的一些總結。

一、傳入資料庫:

1、在頁面輸入資料後,用js提取資料;(此時的資料格式為:string)

2、可以直接將string型別的資料傳入到資料庫進行儲存;

3、有些資料需要 轉成int型別再傳入資料庫,可以使用 parseInt() 來進行轉換;

4、有些資料需要 轉成json格式再傳入資料庫,可以使用 JSON.parse() 來進行轉換;

5、從頁面中獲取到 dict 型別的資料,需要經過 simplejson.loads() 來進行轉換;

二、從資料庫取資料:

1、從資料庫中取出的資料為int型別,可以直接寫到頁面中;

2、從資料庫中取出的資料為string 型別,可以直接寫到頁面中;

3、從資料庫中取出的資料為json 資料,需要進入 json.dumps() 來進行轉換,再寫到頁面中;

三、JavaScript中各種資料轉換的常用函式:

1、JSON.stringify()

將一個JavaScript值(物件或者陣列)轉換為一個 JSON字串,如果指定了replacer是一個函式,則可以替換值,或者如果指定了replacer是一個數組,可選的僅包括指定的屬性。
語法: JSON.stringify(value[, replacer [, space]])

引數 value 
將要序列化成 一個JSON 字串的值。
replacer 可選
如果該引數是一個函式,則在序列化過程中,被序列化的值的每個屬性都會經過該函式的轉換和處理;如果該引數是一個數組,則只有包含在這個陣列中的屬性名才會被序列化到最終的 JSON 字串中;如果該引數為null或者未提供,則物件所有的屬性都會被序列化;關於該引數更詳細的解釋和示例,請參考使用原生的 JSON 物件一文。
space 可選
指定縮排用的空白字串,用於美化輸出(pretty-print);如果引數是個數字,它代表有多少的空格;上限為10。該值若小於1,則意味著沒有空格;如果該引數為字串(字串的前十個字母),該字串將被作為空格;如果該引數沒有提供(或者為null)將沒有空格。
返回值
:一個表示給定值的JSON字串。
JSON.stringify({});                        // '{}'
JSON.stringify(true);                      // 'true'
JSON.stringify("foo");                     // '"foo"'
JSON.stringify([1, "false", false]);       // '[1,"false",false]'
JSON.stringify({ x: 5 });                  // '{"x":5}'

JSON.stringify({x: 5, y: 6});              
// "{"x":5,"y":6}"

JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); 
// '[1,"false",false]'

JSON.stringify({x: undefined, y: Object, z: Symbol("")}); 
// '{}'

JSON.stringify([undefined, Object, Symbol("")]);          
// '[null,null,null]' 

JSON.stringify({[Symbol("foo")]: "foo"});                 
// '{}'

JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'

JSON.stringify(
    {[Symbol.for("foo")]: "foo"}, 
    function (k, v) {
        if (typeof k === "symbol"){
            return "a symbol";
        }
    }
);


// undefined 

// 不可列舉的屬性預設會被忽略:
JSON.stringify( 
    Object.create(
        null, 
        { 
            x: { value: 'x', enumerable: false }, 
            y: { value: 'y', enumerable: true } 
        }
    )
);

// "{"y":"y"}"

2、JSON.parse()

用來解析JSON字串,構造由字串描述的JavaScript值或物件。提供可選的reviver函式用以在返回之前對所得到的物件執行變換(操作)。
語法 JSON.parse(text[, reviver])
引數 text
要被解析成JavaScript值的字串,檢視 JSON 物件學習的JSON 語法的說明。
reviver 可選
如果是一個函式,則規定了原始值如何被解析改造,在被返回之前。
返回值 Object對應給定的JSON文字。
異常 若被解析的 JSON 字串是非法的,則會丟擲 一個語法錯誤異常。
JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null
JSON.parse('1');               //  1

3、parseInt() 

函式解析一個字串引數,並返回一個指定基數的整數 (數學系統的基礎)。
語法 parseInt(string, radix);
引數 string
要被解析的值。如果引數不是一個字串,則將其轉換為字串(使用  ToString 抽象操作)。字串開頭的空白符將會被忽略。

radix
一個介於2和36之間的整數(數學系統的基礎),表示上述字串的基數。比如引數"10"表示使用我們通常使用的十進位制數值系統。始終指定此引數可以消除閱讀該程式碼時的困惑並且保證轉換結果可預測。當未指定基數時,不同的實現會產生不同的結果,通常將值預設為10。
返回值
返回解析後的整數值。 如果被解析引數的第一個字元無法被轉化成數值型別,則返回 NaN。
注意:返回的值是5進位制的。例如:

parseInt('123', 5) // 返回38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
例子:使用 parseInt
以下例子均返回15:
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);   // parseInt(015, 10); 返回 15
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
以下例子均返回 NaN:
parseInt("Hello", 8); // 根本就不是數值
parseInt("546", 2);   // 除了“0、1”外,其它數字都不是有效二進位制數字
以下例子均返回 -15:
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
下例中全部返回 4:
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // 非常大的數值變成 4
parseInt(0.00000000000434, 10); // 非常小的數值變成 4
下面的例子返回 224:
parseInt("0e0",16);

四、Python中各種資料轉換的常用函式:

1、json.dumps()

用於將 Python 物件(dict)編碼成 JSON 字串(str)。因為如果直接將dict型別的資料寫入json檔案中會發生報錯,因此在將資料寫入時需要用到該函式。
例項:
import json  
   
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}   
  
jsObj = json.dumps(name_emb)      
  
print(name_emb)  
print(jsObj)  
  
print(type(name_emb))  
print(type(jsObj))  
執行結果如下:
{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}  
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}  
<type 'dict'>  
<type 'str'> 
使用引數讓 JSON 資料格式化輸出:
>>> import json
>>> print json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
{
    "a": "Runoob",
    "b": 7
}
python 原始型別向 json 型別的轉化對照表:
Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None

null

2、json.loads()

用於解碼 JSON 資料。該函式返回 Python 欄位的資料型別。將str型別的資料轉成dict。
import json  
   
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}   
  
jsDumps = json.dumps(name_emb)      
  
jsLoads = json.loads(jsDumps)   
  
print(name_emb)  
print(jsDumps)  
print(jsLoads)  
  
print(type(name_emb))  
print(type(jsDumps))  
print(type(jsLoads))       
執行結果如下:
'a'變成了u'a'是因為發生了型別轉換,str會轉換成unicode
{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}  
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}  
{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}  
<type 'dict'>  
<type 'str'>  
<type 'dict'>  
json 型別轉換到 python 的型別對照表:
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None

更多內容參考:https://docs.python.org/2/library/json.html

3、json.dump()

 json.dump()用於將dict型別的資料轉成str,並寫入到json檔案中。下面兩種方法都可以將資料寫入json檔案。
import json    
    
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}    
            
emb_filename = ('/home/cqh/faceData/emb_json.json')    
  
# solution 1  
jsObj = json.dumps(name_emb)      
with open(emb_filename, "w") as f:    
    f.write(jsObj)    
    f.close()    
      
# solution 2     
json.dump(name_emb, open(emb_filename, "w"))  
4、json.load()
json.load()用於從json檔案中讀取資料。
import json    
  
emb_filename = ('/home/cqh/faceData/emb_json.json')    
  
jsObj = json.load(open(emb_filename))      
  
print(jsObj)  
print(type(jsObj))  
  
for key in jsObj.keys():  
    print('key: %s   value: %s' % (key,jsObj.get(key)))  
執行結果如下:
{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}  
<type 'dict'>  
key: a   value: 1111  
key: c   value: 3333  
key: b   value: 2222  
key: d   value: 4444  
五、simplejson資料轉換的常用函式:
simplejson是json標準模組的擴充套件(基礎功能相同),是pypi提供的拓展模組,需要另行安裝。不過可以使用python自帶的json庫,基本是相同的使用方法(提供的介面功能基本一致)。在python的library文件中將JSON歸為網路資料控制類,很好的說明了他們的用途,主要用於網路資料控制,編解碼等。但是也具有其他的用途,比如可以用來作為配置檔案的讀寫模組,簡單的檔案操作等。
simplejson.dump(obj, fp, **kwargs):將python物件寫到檔案中(以JSON格式)
simplejson.dumps(obj, **kwargs):將python物件表示成字串(JSON的格式)
simplejson.load(fp, **kwargs):從檔案中(包含JSON結構)讀取為python物件
simplejson.loads(s, **kwargs):從字串中(包含JSON結構)讀取為python物件
class simplejson.JSONDecoder:load/loads的時候呼叫,將JSON格式序列解碼為python物件
class simplejson.JSONEncoder:dump/dumps的時候呼叫,將python物件編碼為JSON格式序列
dump的過程其實就是向檔案控制代碼中寫資料,即物件序列化的過程,需要進行編碼,只是編碼的格式不只是unicode和str的轉換,而是更重要的python物件型別和JSON物件型別之間的轉換。同理,load的過程其實就是從檔案控制代碼中讀資料,即反序列化生成物件的過程,需要進行解碼,只是解碼的格式不只是str和unicode的轉換,而是更重要的JSON物件型別和python物件型別之間的轉換。