2016-10-19 8 views
1

私は2つのJSONファイルを持っています。JSONファイルを再フォーマットしますか?

ファイルA:

"features": [ 
    { 
    "attributes": { 
    "NAME": "R T CO", 
    "LTYPE": 64, 
    "QUAD15M": "279933", 
    "OBJECTID": 225, 
    "SHAPE.LEN": 828.21510830520401 
    }, 
    "geometry": { 
    "paths": [ 
    [ 
     [ 
     -99.818614674337155, 
     27.782542677671653 
     ], 
     [ 
     -99.816056346719051, 
     27.782590806976135 
     ] 
    ] 
    ] 
    } 
    } 

ファイルB:私は、ファイルBがファイルAのように "属性" 変更 "プロパティ" を見るために再フォーマットされたい

"features": [ 
{ 
    "geometry": { 
    "type": "MultiLineString", 
    "coordinates": [ 
     [ 
     [ 
      -99.773315512624, 
      27.808875128096 
     ], 
     [ 
      -99.771397939251, 
      27.809512259374 
     ] 
     ] 
    ] 
    }, 
    "type": "Feature", 
    "properties": { 
    "LTYPE": 64, 
    "SHAPE.LEN": 662.3800009247, 
    "NAME": "1586", 
    "OBJECTID": 204, 
    "QUAD15M": "279933" 
    } 
}, 

、「座標"を"パス "に変更し、"タイプ ":" MultiLineString "と"タイプ ":"フィーチャー "の両方を削除します。これをPythonで行うにはどうすればよいでしょうか?

「属性」キーの値のペアをファイルAのように並べ替える方法はありますか?

これはかなり大きなデータセットであり、ファイル全体を繰り返し処理したいと思います。これは、均一な人間が読める形式にファイルの内容を再フォーマットします

cat <file> | python -m json.tool 

:何について

+2

を試してみましたか?あなたにはJSON + Pythonの答えがたくさんあります。彼らはどこにいらっしゃいましたか? – roganjosh

+1

'json'モジュールを使うと、jsonファイルをPythonのデータ構造にロードし、後でjsonに戻すことができます。だから、Pythonの 'dict'と' list'の項目をループすることの問題です。これは主に退屈な本の操作を維持し、あなたはその部分を自分で行うことができます! – tdelaney

+1

PythonでJSONオブジェクトは単なる辞書です。そのため、1つのファイルを読み込み、辞書の内容に変更して書き出します。 – martineau

答えて

4

PythonでJSONを操作することは、プログラミングのinput-process-output modelの良い候補です。

入力の場合、外部JSONファイルをjson.load()を使用してPythonデータ構造に変換します。

出力するには、json.dump()を使用してPythonデータ構造を外部JSONファイルに変換します。

処理または変換のステップでは、通常のPython dictおよびlistメソッドを使用して、必要な処理を行います。

このプログラムは、あなたが欲しいものを行う可能性があります:あなたは何を

import json 

with open("b.json") as b: 
    b = json.load(b) 

for feature in b["features"]: 

    feature["attributes"] = feature["properties"] 
    del feature["properties"] 

    feature["geometry"]["paths"] = feature["geometry"]["coordinates"] 
    del feature["geometry"]["coordinates"] 

    del feature["geometry"]["type"] 

    del feature["type"] 

with open("new-b.json", "w") as new_b: 
    json.dump(b, new_b, indent=1, separators=(',', ': ')) 
+0

ありがとう、これは私が必要としているものです。以前はJSONライブラリを使用していませんでした。 – a1234

-2

。実際にフィールドの名前を変更する必要がある場合は、sedを使用することができます。

cat <file> | sed -e 's/"properties"/"attributes"/' 

これは、使用する場合には十分です。さらに微妙な構文解析が必要な場合は、ORMライブラリを使用してJSONを管理する方法をお読みください。

+1

私はPython内でJSONを処理するのに悪くないですが、この回答は私には意味がありません。このやり方とは何ですか? – roganjosh

+1

これは2つのjsonオブジェクトをどのように考えていますか? – roganjosh

+0

json.toolとは何ですか?どのようにしてこの問題が解決されますか? – tdelaney

関連する問題