2016-05-01 7 views
0

Ich versuche, eine JSON-Datei wie die flare.json zu reproduzieren, und die Namen, die ich habe, sind wie die IndicatorCode, also versuche ich ein dictTree zu bauen und reproduzieren die jSON-Datei oben erwähnt, und mein Code geht hier:Werfen Sie einen Fehler "nicht JSON serializable" beim Schreiben einer JSON-Datei

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) 

und der Fehler ist wie folgt:

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 

Auf meine Frage zu vereinfachen, ich reproduzieren nur den Fehler wie folgt die vereinfachte Verwendung Ausgangsdaten:

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

Dann bekomme ich den gleichen Fehler: TypeError: <open file 'test.json', mode 'w' at 0x1032c66f0> is not JSON serializable

Bitte helfen Sie mir, thx ~

+0

'json.dumps' Dies ist ein Dump-to-String (beachten Sie die' s') Sie wollen die normale 'json.dump', die auf eine Datei ablegt. –

+0

@BurhanKhalid Danke, ich muss Python genauer behandeln! –

Antwort

0

Im Beispielcode

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

Sie f mit z, Argumente der Funktion ausgetauscht werden sollte, sind (Objekt, Ausgabedatei).

+0

meine Sorglosigkeit, ich benutze Dumps() anstelle von Dump() in den ersten Code und ich finde nichts in die dictTree.json Datei ausgegeben, so ändere ich einfach die Position der beiden Argumente. Danke!!!!!!! –

Verwandte Themen