前提:这段时间刚刚开始做前端的一些工作,对数据的转换会比较乱一点,在这里记录下关于数据转换的一些总结。
一、传入数据库:
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对象类型之间的转换。