2017-02-25 120 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瀏覽發佈查詢和閱讀文檔之前@ [如何問](http://stackoverflow.com/help/how-to-ask) – Prasad

+0

你需要發佈你有什麼嘗試和在這裏你卡住了 – Prasad

回答

1

問題描述似乎認爲JSON對象中的鍵值對的排序是固定的。不同的面向JSON的工具(實際上不同版本的jq)對此有不同的看法。在任何情況下,下面都假定jq的版本尊重排序(例如jq 1.5);它也假定inputs可用,但這是不重要的。

的關鍵在於下面的解決方案是輔助函數,map_nth_value/2,其修改在JSON對象的第n個項的值:

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])) 

隨着文件上述JQ程序(比如program.jq )中,用在一個文件(文本文件發言權input.txt中),並在一個文件中的JSON對象(比如object.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" 
     } 
     } 
    } 
    } 
}