2016-05-01 43 views
0

我試圖重現一個像flare.json這樣的json文件,而且我的名字就像IndicatorCode,所以我試圖構建一個dictTree和重現上面提到的JSON文件,我的代碼放在這裏:當試圖寫一個json文件時拋出一個錯誤「not JSON serializable」

import numpy as np 
import pandas as pd 
import json 
li = []; 
dictTree = {} 
out = {"name":'Indicators', 'children':[]}; 
dic = pd.read_csv('../dictTree.csv') 
dicta = {} 
for i in range(len(dic)): 
    dicta[dic["IndicatorCode"][i]] = dic["IndicatorName"][i]; 
    li.append(dic["IndicatorCode"][i]) 
for x in li: 
    i = 0 
    k = 0 
    d = dictTree 
    while k < 2: 
     s = '' 
     while x[i] != '.': 
      s += x[i] 
      i = i+1 
     i=i+1 
     k= k+1 
     if s not in d: 
      d[s] = {} 
     #print s 
     d = d[s] 
    s = '' 
    while i < len(x) and x[i] != '.': 
     s += x[i] 
     i = i+1 
    if s not in d: 
     d[s] = [] 
    d[s].append({'Name':x,"info":dicta[x]}) 
level1 = out['children'] 
for x in dictTree: 
    level2 = [] 
    level1.append({"name":x,"children":level2}) 
    dictlevel2 = dictTree[x] 
    for y in dictlevel2: 
     level3 = [] 
     level2.append({'name':y,'children':level3}) 
     dictlevel3 = dictlevel2[y] 
     for z in dictlevel3: 
      level3.append({'name':z,'children':dictlevel3[z]}) 
with open('dictTree.json','w') as f: 
    json.dumps(f,out) 

和錯誤是這樣的:

Traceback (most recent call last): 
File "produceTreeJson.py", line 46, in <module> 
    json.dumps(f,out) 
    File "/Users/Peter/anaconda/lib/python2.7/json/__init__.py", line 250, in dumps 
    sort_keys=sort_keys, **kw).encode(obj) 
    File "/Users/Peter/anaconda/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/Users/Peter/anaconda/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/Users/Peter/anaconda/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <open file 'dictTree.json', mode 'w' at 0x107b43030> is not JSON serializable 

爲了簡化我的問題,我只是重現錯誤,如遵循使用簡化輸出數據:

>>> z = {'name': 'indicator', 'children': [{'name': '1','size':1}, {'name':2,"size" :2}]} 
>>> with open('test.json','w') as f: 
...  json.dump(f,z) 

然後我得到了同樣的錯誤:TypeError: <open file 'test.json', mode 'w' at 0x1032c66f0> is not JSON serializable

請幫助我,THX〜

+0

'json.dumps'這是轉儲到字符串(注意's')你想要的正常'json.dump'它轉儲到一個文件。 –

+0

@BurhanKhalid謝謝,我需要更精確地處理python! –

回答

0

在示例代碼

with open('test.json','w') as f: 
    json.dump(f,z) 

你應該z交換f,函數的參數是(對象,輸出文件)。

+0

我的粗心,我在第一個代碼中使用dumps()而不是dump(),並且我沒有發現任何東西轉儲到dictTree.json文件中,所以我只是改變了兩個爭論的位置。謝謝你!!!!!!! –