2013-09-27 50 views
1

我使用python csv模块创建一个csv,其中一些值为json字符串。然而,csv模块的报价是完全打破了JSON:使用JSON Python CSV模块问题

import csv 
import json 
writer = csv.writer(open('tmp', 'w')) 
writer.writerow([json.dumps([{'a' : 'b'}])]) 

的输出JSON坏了,你可以看到:

cat tmp 
> "[{""a"": ""b""}]" 

import json 
json.loads("[{""a"": ""b""}]") 
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 property name: line 1 column 2 (char 2) 

而且csv对象转向引述关:

import csv 
import json 
writer = csv.writer(open('tmp', 'w'), quoting=csv.QUOTE_NONE) 
writer.writerow([json.dumps([{u'a' : u'b'}])]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
_csv.Error: need to escape, but no escapechar set 

有没有其他人遇到过这个?难道jsoncsv只是不能很好的一起玩? (这不是我的想法,json stirngs csv文件..我现在只需要处理)。不幸的是,这些CSV的我创建包含散列摘要和各种其他复杂的东西,这样所有的sedawk ISH型解决方案来解决我尝试都失败或搞砸了别的东西的JSON ..

+0

删除'quoting = csv.QUOTE_NONE'参数。 – falsetru

+0

对,但是json仍然被引用破坏。 – qwwqwwq

+0

难道你不能将引号字符改为'''? – mgilson

回答

2

不使用"作为你的引用字符。使用别的东西:

with open('tmp', 'w') as fout: 
    writer = csv.writer(fout, quotechar="'") 

真的,这只是整洁的东西了一点。当您读取数据时,您首先需要通过csv.reader读取数据来“取消”它。这应该可以让你恢复你输入的字符串,其中有效的json

+0

设置quotechar除了''“'以外的任何其他问题解决了这个问题,我的另一个问题是读取它的其他脚本不使用'csv.reader',它也解决了这个问题 – qwwqwwq