2017-02-25 13 views
1

私はjson構造を持っており、別々のテキストファイルにある2つのフィールドの文字列を置き換えたいと考えています。ここで JSONの特定のフィールドをテキストファイルから置換する

は2つのレコードを持つJSONファイルです:

{ 
    "events" : { 
    "-KKQQIUR7FAVxBOPOFhr" : { 
     "dateAdded" : 1487592568926, 
     "owner" : "62e6aaa0-a50c-4448-a381-f02efde2316d", 
     "type" : "boycott" 
    }, 
    "-KKjjM-pAXvTuEjDjoj_" : { 
     "dateAdded" : 1487933370561, 
     "owner" : "62e6aaa0-a50c-4448-a381-f02efde2316d", 
     "type" : "boycott" 
    } 
    }, 
    "geo" : { 
    "-KKQQIUR7FAVxBOPOFhr" : { 
     ".priority" : "qw3yttz1k9", 
     "g" : "qw3yttz1k9", 
     "l" : [ 40.762632, -73.973837 ] 
    }, 
    "-KKjjM-pAXvTuEjDjoj_" : { 
     ".priority" : "qw3yttx6bv", 
     "g" : "qw3yttx6bv", 
     "l" : [ 41.889019, -87.626291 ] 
    } 
    }, 
    "log" : "null", 
    "users" : { 
    "62e6aaa0-a50c-4448-a381-f02efde2316d" : { 
     "events" : { 
     "-KKQQIUR7FAVxBOPOFhr" : { 
      "type" : "boycott" 
     }, 
     "-KKjjM-pAXvTuEjDjoj_" : { 
      "type" : "boycott" 
     } 
     } 
    } 
    } 
} 

そして、ここで私はsubstitueしたいtxtファイルです:

49.287130, -123.124026 
36.129770, -115.172811 

はたくさんのより多くのレコードがありますが、私はこれを保持しました簡潔さのために2。

ご協力いただければ幸いです。ありがとうございました。

+0

へようこそStackoveflowへようこそ質問を投稿してDoc @を読む前に@ – Prasad

+0

あなたは何を試してみる必要がありますか?ここであなたは固まった – Prasad

答えて

1

問題の説明は、JSONオブジェクト内のキーと値のペアの順序が固定されていると仮定しているようです。異なるJSON指向のツール(実際には異なるバージョンのjq)では、これとは異なるテイクがあります。いずれにしても、以下は、順序付け(例えば、jq 1.5)を考慮したバージョンのjqを想定している。また、それは必須ではありませんが、inputsが利用可能であると仮定しています。 program.jq言う(ファイル上記JQプログラムで

def map_nth_value(n; filter): 
    to_entries 
    | (.[n] |= {"key": .key, "value": (.value | filter)}) 
    | from_entries ; 

[inputs | select(length > 0) | split(",") | map(tonumber)] as $lists 
| reduce range(0; $lists|length) as $i 
    ($object; 
     .geo |= map_nth_value($i; .l = $lists[$i])) 

次の溶液への鍵は、JSONオブジェクト内のn番目のキーの値を変更するヘルパー関数、map_nth_value/2であります)、およびファイル内のテキストファイル(たとえばINPUT.TXT)とファイル(object.json言う)でJSONオブジェクトと、次の呼び出し:

jq -R -n --argfile object object.json -f program.jq input.txt 

は生成します。

{ 
    "events": { 
    "-KKQQIUR7FAVxBOPOFhr": { 
     "dateAdded": 1487592568926, 
     "owner": "62e6aaa0-a50c-4448-a381-f02efde2316d", 
     "type": "boycott" 
    }, 
    "-KKjjM-pAXvTuEjDjoj_": { 
     "dateAdded": 1487933370561, 
     "owner": "62e6aaa0-a50c-4448-a381-f02efde2316d", 
     "type": "boycott" 
    } 
    }, 
    "geo": { 
    "-KKQQIUR7FAVxBOPOFhr": { 
     ".priority": "qw3yttz1k9", 
     "g": "qw3yttz1k9", 
     "l": [ 
     49.28713, 
     -123.124026 
     ] 
    }, 
    "-KKjjM-pAXvTuEjDjoj_": { 
     ".priority": "qw3yttx6bv", 
     "g": "qw3yttx6bv", 
     "l": [ 
     36.12977, 
     -115.172811 
     ] 
    } 
    }, 
    "log": "null", 
    "users": { 
    "62e6aaa0-a50c-4448-a381-f02efde2316d": { 
     "events": { 
     "-KKQQIUR7FAVxBOPOFhr": { 
      "type": "boycott" 
     }, 
     "-KKjjM-pAXvTuEjDjoj_": { 
      "type": "boycott" 
     } 
     } 
    } 
    } 
} 
関連する問題