2016-05-24 9 views
1

何かを.jsonファイルに追加しようとしています。Python json - .jsonファイルを編集する

これは私が何をしようとしている

 "106569102398611456" : { 
     "currentlocation" : "Pallet Town", 
     "name" : "Anthony", 
     "party" : [ 
      { 
       "hp" : "5", 
       "level" : "1", 
       "pokemonname" : "bulbasaur" 
      } 
     ], 
     "pokedollars" : 0 
    } 
} 

を節約するものであるが、「パーティー」に何かを追加するには、コマンドを作成しています。ここに私が望むものの例があります。

"106569102398611456" : { 
     "currentlocation" : "Pallet Town", 
     "name" : "Anthony", 
     "party" : [ 
      { 
       "hp" : "5", 
       "level" : "1", 
       "pokemonname" : "bulbasaur" 
      }, 
      { 
       "hp" : "3", 
       "level" : "1", 
       "pokemonname" : "squirtle" 
      } 

     ], 
     "pokedollars" : 0 
    } 
} 

編集:

これは私が試みられてきたが、私は考え

def addPokemon(pokemon): 
    pokemonName = convert(pokemon) 
    for pokemon in players['party']: 
     pokemon.append(pokemonName) 

変換(ポケモン)は基本的に私はタイプポケモンをつかむないと変更がそれにレベルを与える持っているもので、 .jsonファイルに追加するヘル​​ス

+0

'append()'メソッドの使い方は何ですか? –

+0

と何を試しましたか?いくつかのコードを表示できますか?エラーメッセージはありますか? – glls

+0

ファイルに余分なものを追加する場所があまりにもわかりません – syntax

答えて

1

JSONファイルを更新するには、オブジェクトをテンポラリファイルに書き出し、ターゲットファイルをテンポラリファイルに置き換えます。例:

import json 
import os 
import shutil 
import tempfile 

def rewriteJsonFile(sourceObj, targetFilePath, **kwargs): 
    temp = tempfile.mkstemp() 
    tempHandle = os.fdopen(temp[0], 'w') 
    tempFilePath = temp[1] 
    json.dump(sourceObj, tempHandle, **kwargs) 
    tempHandle.close() 
    shutil.move(tempFilePath, targetFilePath) 

これは、更新が連続的に起こっていることを前提としています。更新が並行して起こっている可能性がある場合は、一度に1つの更新が確実に行われるように、何らかのロックが必要です。その時点では、sqliteのようなデータベースを使用し、JSON形式でクエリを返す方がよいでしょう。

関連する問題