2017-02-25 70 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" 
     } 
     } 
    } 
    } 
}