我昨天刚开始与TCL合作。我试图通过调用谷歌地图API来获取经度和纬度。 我使用以下网址(带有我的密钥) https://maps.googleapis.com/maps/api/geocode/json?address=amsterdam&key=[MYKEY]
返回是json,我用json2dict转换它。这给了我一个只有"结果"和"状态"作为钥匙。
我如何从结果中得到长和拉?我尝试了dict过滤器,但我真的无法让它工作
set lat [dict filter $dict {k v} {expr {$k eq "lat"}}]
在javascript中它就像这样的东西一样简单
result[0].geometry.bounds.lat
答案 0 :(得分:4)
我猜你的json结构,因此dict的结构,但它可能是这样的:
label
然后
package req json
set js {{"result":[{"geometry":{"bounds":{"lat":42,"long":24}}}]}}
set d [json::json2dict $js]
或,在一行
set results [dict get $d result]
set item [lindex $results 0]
set lat [dict get $item geometry bounds lat] ;# => 42
好的,下载并构建rl_json
set lat [dict get [lindex [dict get $d result] 0] geometry bounds lat]
然后
$ sudo apt install tcl-dev
$ git clone https://github.com/RubyLane/rl_json.git
$ cd rl_json
$ ./configure && make && sudo make install
非常简单。
答案 1 :(得分:0)
结果[0] .geometry.bounds.lat
使用tdom的JSON支持,您可以获得相同的好处(以及更多好处):
% package req tdom
0.9.1
% set js {{"result":[{"geometry":{"bounds":{"lat":42,"long":24}}}]}}
{"result":[{"geometry":{"bounds":{"lat":42,"long":24}}}]}
% set d [dom parse -json $js]
domDoc0x7fc98b700770
% $d selectNodes {string(//result/*[1]/geometry/bounds/long)}
24
% $d selectNodes {string(//result/*[1]/geometry/bounds/lat)}
42
这假设你有t + 0.9+。 XPath位置访问是从一开始的。