str()和repr()(及''操作符)以及python对json的简单操作

来源:互联网 发布:php获取数组元素个数 编辑:程序博客网 时间:2024/06/02 01:47

str(),epr()和''运算在特性和功能方面相似,事实上repr()和''做的是完全一样的事情(函数和操作符做同样一件事,是因为在有的场合函数会比操作符更合适,它们返回的是一个对象的“官方”字符串表示。

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"


python对json的相关操作


对简单数据类型的encoding 和 decoding:

encoding:把一个Python对象编码转换成Json字符串
decoding:把Json格式字符串解码转换成Python对象

使用简单的json.dumps方法对简单数据类型进行编码


>>> obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,encoding3),'key2':(4,5,6)}]
>>> encodedjson = json.dumps(obj)    #encoding:json.dumps()
>>> print repr(obj)
[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}]
>>> print encodedjson
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]

>>> print encodedjson[0]
[

>>> print encodedjson[1]
[
>>> print encodedjson[2]
1
>>> print encodedjson[3]
,

>>> print obj[0]
[1, 2, 3]
>>> print obj[0][1]
2


>>> decodejson = json.loads(encodedjson)   #decoding  :json.loads()
>>> print type(decodejson)
<type 'list'>
>>> print decodejson[4]['key1']
[1, 2, 3]
>>> print decodejson
[[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]
loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘abc’转化为了unicode类型。

json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separators,indent等参数。

sort_keys:对dict对象进行排序,我们知道默认dict是无序存放的

>>> data1 = {'b':789, 'c':456, 'a':123}

>>> d1 = json.dumps(data1,sort_keys=True)

>>> print d1
{"a": 123, "b": 789, "c": 456}


indent:缩进的意思,它可以使得数据存储的格式变得更加优雅。

>>> d1 = json.dumps(data1, sort_keys=True,indent=4)
>>> print d1
{
    "a": 123, 
    "b": 789, 
    "c": 456
}


separator:作用是去掉,,:后面的空格,在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上separators参数

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]print 'DATA:', repr(data)print 'repr(data)             :', len(repr(data))print 'dumps(data)            :', len(json.dumps(data))print 'dumps(data, indent=2)  :', len(json.dumps(data, indent=2))print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))

输出:

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]  repr(data)             : 35    #data的长度不同dumps(data)            : 35dumps(data, indent=2)  : 76dumps(data, separators): 29


skipkeys:在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。

skipkeys可以跳过那些非string对象当作key的处理

data= [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ]try:    print json.dumps(data)except (TypeError, ValueError) as err:    print 'ERROR:', errprint print json.dumps(data, skipkeys=True)

输出:

ERROR: keys must be a string[{"a": "A", "c": 3.0, "b": [2, 4]}]
.





0 0