2017-10-31 8 views
-1

私はこのデータをJSONファイルJSONファイルからnull値、false値を削除するにはどうすればよいですか?

{ 

    "in_reply_to_screen_name": null, 
    "favorited": false, 
    "id_str": "92", 
    "entities": { 
     "user_mentions": [], 
     "symbols": [], 
     "urls": [], 
     "hashtags": [ 
      { 
       "indices": [0,8] 
      } 
     ] 
    }, 
    "geo": null, 
    "user": { 
     "verified": false, 
     "notifications": null, 
     "profile_sidebar_border_color": "FFFFFF", 
     "geo_enabled": true, 
     "profile_background_tile": true, 
     "url": null, 
     "id": 278, 
     "default_profile": false, 
     "lang": "pt", 
     "location": null, 
     "translator_type": "none", 
     "protected": false 
    }, 
    "id": 92, 
    "in_reply_to_status_id_str": null, 
    "in_reply_to_status_id": null, 
    "created_at": "Tue Oct", 
    "is_quote_status": false, 
    "text": "This is a vdd", 
    "truncated": false, 
    "retweeted": false 
} 

どのように私は、Pythonを使用して、このファイルの、ヌル虚偽と真実含むすべてのキーと値のペアを削除することができますがありますか?

これらの値は、データ構造のさまざまなレベルで表示されます。

+0

あなたがこれまでに試してみましたか? –

+0

タイトルには「null、false」(つまり「偽」)の値が記載されていますが、質問テキストには「null、false **、true **」と記載されているのが不思議です。どちらですか? – alexis

+0

@KevinJohnson、例えば次の手順:Fとしてオープン(arq_geral、R '')を有する:Fの行のための :dados_tweetでつぶやきのため ツイート= json.loads(ライン) dados_tweet.append(つぶやき) : tweet ["geo"]: del tweet ["geo"] たとえば、 'geo'は削除されません。 –

答えて

4

オブジェクトを再帰的に処理し、JSONに再度エンコードすることでデコードします。

私は、このようなタスクのためsingle dispatchを使用したい:

from functools import singledispatch 

@singledispatch 
def remove_null_bool(ob): 
    return ob 

@remove_null_bool.register(list) 
def _process_list(ob): 
    return [remove_null_bool(v) for v in ob] 

@remove_null_bool.register(dict) 
def _process_list(ob): 
    return {k: remove_null_bool(v) for k, v in ob.items() 
      if v is not None and v is not True and v is not False} 

data = json.load(source) 
json.dump(dest, remove_null_bool(data)) 

私は正確なオブジェクトをテストするためにis not Falseなどを使用していました。 v not in {None, False, True}を使用した場合、整数値01は、それぞれFalseTrueがこれらの値と等しいため、削除されます。 dataにロードされ、あなたのサンプルに対して

デモ:

>>> print(json.dumps(remove_null_bool(data), indent=4, sort_keys=True)) 
{ 
    "created_at": "Tue Oct", 
    "entities": { 
     "hashtags": [ 
      { 
       "indices": [ 
        0, 
        8 
       ] 
      } 
     ], 
     "symbols": [], 
     "urls": [], 
     "user_mentions": [] 
    }, 
    "id": 92, 
    "id_str": "92", 
    "text": "This is a vdd", 
    "user": { 
     "id": 278, 
     "lang": "pt", 
     "profile_sidebar_border_color": "FFFFFF", 
     "translator_type": "none" 
    } 
} 
+0

実行中、 'dest'は認識されません。 NameError:名前 'dest'が定義されていません このプログラムでこれが発生する必要がありますか?それとも私の間違いでしたか? file = open( 'file_ok.json'、 'w')#正しいデータを書き込むためのファイル# file_data = 'file_data.json' open(file_data、 'r')でnull、false、trueの値を持つ#JSONファイルf: for f: data = json.loads(行) file.write(json.dump(dest、remove_null_bool(data)) file.write( '\ n') file.close() –

+0

@Rennan、あなたは 'dest 'がどこから来ると思いますか?コードを見て、 'json.dump()'を調べると、あなた自身の質問に答えることができます。 – alexis

+0

@RennanCéosGleyson私は説明していました。あなた自身の入出力ファイルオブジェクトを提供してください。 –

関連する問題