python json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解

析和生成。json默认应该是在python 2.6以上。

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

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

[python]
import json

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

输出:

[python]
[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}]
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]
[/python]

json decoding

[python]
decodejson = json.loads(encodedjson)
[/python]

问题


[python]
>>> str = '["hello\"world","hello\"world"]'
>>> json.loads(str)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 8 (char 8)
>>> print str
["hello"world","hello"world"]
[/python]

问题就是出现在上面,用反斜杆转义了双引号,结果赋值的时候 str 的结构就变了,json就没法识别了,所

以只能用双斜杆,

[python]
>>> str = '["hello\\"world","hello\\"world"]'
>>> json.loads(str)
[u'hello"world', u'hello"world']
>>> print str
["hello\"world","hello\"world"
[/python]

原本是想用json先将日志格式化之后,通过syslog-ng传递到另外机器上,syslog-ng对接的是管道,从管道

里用 read 命令读取的到变量里面,因为 read 命令其实就是一个变量赋值的过程,所以赋值过程中的单斜

干都被shell吃了,解决方案就是要么换成双斜杆,不过这吃力不讨好,最好的办法呢? read 命令加个参

数 "-r",这样read就做变量赋值的时候就会屏蔽所有的反斜杆。

标签:Linux, Python, json

评论已关闭