2016-03-29 38 views
4

jqを使用して、国コードのリストで.txtファイルを解析し、それらをjsonオブジェクトの値に書きたいとします。ここでjq .txtファイルを読み込んでjsonファイルに書き込む

は、私がこれまで

.txtファイルは、この

"NSC" 
"KZC" 
"KCC" 
"KZL" 
"NZG" 
"VRU" 
"ESM" 
"KZF" 
"SFU" 
"EWF" 
"KQY" 
"KQV" 

のように見え、私のJSONはここでは、この

{ 
    "scsRequestId": null, 
    "includeMetadata": true, 
    "includeHoldings": true, 
    "country": [], 
    "region": [], 
    "oclcSymbol": [] 
} 

のように見えるエラーIである

cat myfile.json | 
jq -R -f test_id.txt 'select(.country == []).country = "test_id.txt"' > newfile.json 

持っているものです午前中

jq: error: syntax error, unexpected QQSTRING_START, expecting $end (Unix shell quoting issues?) at <top-level>, line 2: 
"KZC" 
jq: 1 compile error` 

国コードのリストを国の配列に入れたいと思います。

すべてのヘルプは

+0

あなたが入力テキストファイル内の引用符を持っている理由はありますか?それがJSON文字列でない場合、なぜそれがそうであったかのように見積もりますか? –

+0

@CharlesDuffyそれは私がそれを得る方法です。選択肢ではありません。私は引用符なしで同様のファイルをテストしようとしましたが、どちらもうまくいきません。私はjqで処理する前に引用符を削除することができました。 – mjo

+0

あなたの編集が私の答えより新しいことがわかりました。答えは質問の誤読に基づいていると言っていますか? [私がそれを実行すると、リスト*は国の配列に入ります。初期コードの改訂で "regions"と誤って命名された変数は、出力に影響を与えないので無意味です。 –

答えて

6

-fの引数はから実行するためのフィルタを読み込むためのファイルで認識されます。ファイルからデータを読み取る場合は、-fではなく、--slurpfileを使用します。

したがって:あなたの提供入力で

jq --slurpfile countries test_id.txt '.country=$countries' <myfile.json >newfile.json 

を実行すると、newfile.jsonでの結果の内容は以下のとおりです。

{ 
    "scsRequestId": null, 
    "includeMetadata": true, 
    "includeHoldings": true, 
    "country": [ 
    "NSC", 
    "KZC", 
    "KCC", 
    "KZL", 
    "NZG", 
    "VRU", 
    "ESM", 
    "KZF", 
    "SFU", 
    "EWF", 
    "KQY", 
    "KQV" 
    ], 
    "region": [], 
    "oclcSymbol": [] 
} 
関連する問題