2017-10-05 6 views
1

私は緯度取得するJQを使用し、LONが、結果は次のようになり値場合gpspipejqを使用して末尾のゼロを失うことなく緯度と経度を取得するにはどうすればよいですか?

{ 
    "lat":34.284606710, 
    "lon":-12.543774500 
} 

から

#!/bin/bash 

timeout -t 15 gpspipe -w -n 8 gpsd | jq '{latitude:.lat,longitude:.lon}' | 
{ 
    # do something 
} 

としてbashスクリプト内だから私の入力をjqコマンドを使用しようとしています:"34.28460671"緯度は"-12.5437745"、経度は"-12.5437745"です。私が望む何

は末尾に(すなわち"34.284606710""12.543774500"

だから基本的に、私の問題は、私は文字列として緯度と経度を取得することができないということである(末尾のゼロと)値を文字列として取得することです0)、bashスクリプトでjqを使用します。

+0

を生成しますか? –

+0

デバイスの位置を現在の位置として設定するには、それらの座標が必要です。末尾の0がなければ、場所は間違っています。 – am1991

+0

申し訳ありません私はかなりあなたを取得していない..単純な 'object.lat.toString()'は文字列として値を取得するのですか? –

答えて

1

末尾のゼロを紛失することなくjqを使用して緯度と経度を取得するにはどうすればよいですか?

文字列の緯度と

{"lat":"34.284606710","lon":"-12.543774500"}

解析する文字列

{"lat":34.284606710,"lon":-12.543774500} 

にBLOCKQUOTE

変更あなたのJSON応答値= object.lat.toString() ;

String longitude = object.lon.toString();

このように、JSONレスポンスから何かを失うことはありません。

+0

JSONについてよく知っていて、String/Textを値として定義すると、問題解決に役立ちます。つまり、「21.1210000」または「34 .34343403040」です。 –

1

bashスクリプトでは、文字列補間でjqを使用して緯度と経度の値を取得し、ゼロ埋めをprintf()で行うことができます。 フラグがjqの場合、値から二重引用符が取り除かれ、whileループに供給されます。

timeout -t 15 gpspipe -w -n 8 gpsd | jq -r '"\(.lat) \(.lon)"' | while read -r lat lon; do 
    printf -v z_lat "%.9f" "$lat" 
    printf -v z_lon "%.9f" "$lon" 
    printf "Padded lat: %s Padded lon: %s\n" "${z_lat}" "${z_lon}"  
done 

printf -vが必要jqから受け取った変数からフォーマットと変数z_latz_lonの末尾ゼロパディング必要とストアを適用することはありません。ここで

2

pad機能を使用してソリューションです:

def pad(n):"\(.)"|(split(".")+["0"])[:2]|.[1]|=(.+"0"*n)[:n]| join("."); 
"\(.lat|pad(9)) \(.lon|pad(9))" 

、について説明

def pad(n): 
    "\(.)"     # convert to string 
    | (split(".")+["0"])[:2] # split into whole and fractional parts 
    | .[1]|=(.+"0"*n)[:n]  # keep first n digits after adding n zeros to fraction 
    | join(".")    # combine back into a string 
    ; 

あなたはそれがあなたのサンプルdata.jsonのデータと上記フィルタでhttps://jqplay.org/s/e8ZHP1t_K3

でどのように動作するかを見ることができますfilter.jqのコマンド

あなたがそれを望むのはなぜ
$ jq -r -f filter.jq data.json 

34.284606710 -12.543774500 
関連する問題