Json 2可用格式

时间:2018-02-07 10:56:11

标签: json tcl

我昨天刚开始与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 

2 个答案:

答案 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位置访问是从一开始的。