2016-03-31 7 views
1

もっと複雑な構造を構築しようとすると、単純な辞書{}とリスト[]からJSONをビルドできます。私は出力JSONに '\'を埋め込みます。Pythonは動的にJSONをサブアレイで構築します

私が欲しいの構造は:

{'name': 'alpha', 
    'results': '[{"entry1": "[{\\\\"sub1\\": \\\\"one\\\\"}, {\\\\"sub2\\\\": ' 
      '\\\\"two\\\\"}]"}, {"entry2": "[{\\\\"sub1\\\\": \\\\"one\\\\"}, 
    {\\\\"sub2\\\\": ' 
      '\\\\"two\\\\"}]"}]'} 

注埋め込ま\\:

{"name": "alpha", 
"results": [{"entry1": 
     [ 
     {"sub1": "one"}, 
     {"sub2": "two"} 
     ] 
    }, 
    {"entry2": 
     [ 
     {"sub1": "one"}, 
     {"sub2": "two"} 
     ] 
    } 
] 
} 

これは私が得るものです。コードがjson.dumpsを通過するたびに、別の\が追加されます。

ここでほとんど動作するコードですが、しない:この行で

import json 
import pprint 
testJSON = {} 

testJSON["name"] = "alpha" 

#build sub entry List 
entry1List = [] 
entry2List = [] 
topList = [] 
a1 = {} 
a2 = {} 
a1["sub1"] = "one" 
a2["sub2"] = "two" 

entry1List.append(a1) 
entry1List.append(a2) 

entry2List.append(a1) 
entry2List.append(a2) 

# build sub entry JSON values for Top List 
tmpDict1 = {} 
tmpDict2 = {} 
tmpDict1["entry1"] = json.dumps(entry1List) 
tmpDict2["entry2"] = json.dumps(entry2List) 
topList.append(tmpDict1) 
topList.append(tmpDict2) 

# Now lets' add the List with 2 sub List to the JSON 
testJSON["results"] = json.dumps(topList) 

pprint.pprint (testJSON) 
+0

エンコードされたJSONをdictに埋め込み、すでにエンコードされているJSONを再エンコードします。 JSONを "マージ"したい場合は、単に辞書をマージする –

+0

単純に、Pythonのdictやlistの形式でデータを構築し、最後に 'json.dumps(data)'を使ってJSONに変換します。 JSONは特殊なデータ型ではなく、文字列形式のデータを表す逐次化メソッドです。 –

答えて

3

ルック:

tmpDict1["entry1"] = json.dumps(entry1List)

これはキーentry1をが文字列出力の値を持っていることを指定していますentry1をjsonに変換する。本質的に、それはJSON文字列にJSONを入れているので、それはエスケープされています。

他の場所と同じ

tmpDict1["entry1"] = entry1List

:巣にデータ構造、私はいいと思います。一度リストと辞書のツリーがあれば、ルートコンテナ(dictまたはリストのいずれか)にjson.dumps()を1回だけ呼び出す必要があります。

+0

ああ!私の使用パターンは間違っていた。説明をありがとうございます。私は私のアプローチをやり直します。 – user3549628

+0

テスト済みです。したがって、構造体firstを構築し、次にjson.dumps()関数を使用します。洞察に感謝します。 – user3549628

関連する問題