一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
str()
json.dumps()
>>> data = {'jsonKey': 'jsonValue',"title": "hello world"} >>> print json.dumps(data) {"jsonKey": "jsonValue", "title": "hello world"} >>> print str(data) {'jsonKey': 'jsonValue', 'title': 'hello world'} >>> json.dumps(data) '{"jsonKey": "jsonValue", "title": "hello world"}' >>> str(data) "{'jsonKey': 'jsonValue', 'title': 'hello world'}"
我的问题是:
>>> data = {'jsonKey': 'jsonValue',"title": "hello world'"} >>> str(data) '{\'jsonKey\': \'jsonValue\', \'title\': "hello world\'"}' >>> json.dumps(data) '{"jsonKey": "jsonValue", "title": "hello world\'"}' >>>
我的预期输出: "{'jsonKey': 'jsonValue','title': 'hello world''}"
"{'jsonKey': 'jsonValue','title': 'hello world''}"
>>> data = {'jsonKey': 'jsonValue',"title": "hello world""} File "<stdin>", line 1 data = {'jsonKey': 'jsonValue',"title": "hello world""} ^ SyntaxError: EOL while scanning string literal >>> data = {'jsonKey': 'jsonValue',"title": "hello world\""} >>> json.dumps(data) '{"jsonKey": "jsonValue", "title": "hello world\\""}' >>> str(data) '{\'jsonKey\': \'jsonValue\', \'title\': \'hello world"\'}'
我的预期输出: "{'jsonKey': 'jsonValue','title': 'hello world\"'}"
"{'jsonKey': 'jsonValue','title': 'hello world\"'}"
对我来说,不必再次将输出字符串更改为json(dict)。
这该怎么做?
json.dumps()不仅仅是从Python对象中生成一个 字符串 ,它还会在Type Conversion Table之后始终生成一个 有效的 JSON字符串(假设对象内部的所有内容都是可序列化的)。
例如,如果其中一个值为None,str()则将生成一个无法加载的无效JSON:
None
>>> data = {'jsonKey': None} >>> str(data) "{'jsonKey': None}" >>> json.loads(str(data)) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads return _default_decoder.decode(s) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting property name: line 1 column 2 (char 1)
但dumps()将转换None为null生成可以加载的有效JSON字符串:
dumps()
null
>>> import json >>> data = {'jsonKey': None} >>> json.dumps(data) '{"jsonKey": null}' >>> json.loads(json.dumps(data)) {u'jsonKey': None}