2016-11-17 3 views
0

APIプロセスをBigQueryに自動化しようとしているときに問題が発生しています。改行で区切られたJSON形式の解析フィルタ

問題は、データを改行で区切ったJSON形式にしてBigQueryデータベースに入れる必要があるということですが、私が引っ張っているデータはそうしないので、解析する必要があります。

Here is a link to pastebin so you can get an idea of what the data looks likeが、ちょうどので、また、ここにある:二つの問題は、最初の行です

{"type":"user.list","users":[{"type":"user","id":"581c13632f25960e6e3dc89a","user_id":"ieo2e6dtsqhiyhtr","anonymous":false,"email":"[email protected]","name":"Joe Martinez","pseudonym":null,"avatar":{"type":"avatar","image_url":null},"app_id":"b5vkxvop","companies":{"type":"company.list","companies":[]},"location_data":{"type":"location_data","city_name":"Houston","continent_code":"NA","country_name":"United States","latitude":29.7633,"longitude":-95.3633,"postal_code":"77002","region_name":"Texas","timezone":"America/Chicago","country_code":"USA"},"last_request_at":1478235114,"last_seen_ip":"66.87.120.30","created_at":1478234979,"remote_created_at":1478234944,"signed_up_at":1478234944,"updated_at":1478235145,"session_count":1,"social_profiles":{"type":"social_profile.list","social_profiles":[]},"unsubscribed_from_emails":false,"user_agent_data":"Mozilla/5.0 (Linux; Android 6.0.1; SM-G920P Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.68 Mobile Safari/537.36","tags":{"type":"tag.list","tags":[]},"segments":{"type":"segment.list","segments":[{"type":"segment","id":"57d2ea275bfcebabd516d963"},{"type":"segment","id":"57d2ea265bfcebabd516d962"}]},"custom_attributes":{"claimCount":"1","memberType":"claimant"}},{"type":"user","id":"581c22a19a1dc02c460541df","user_id":"1o3helrdv58cxm7jf","anonymous":false,"email":"[email protected]","name":"Joe Coleman","pseudonym":null,"avatar":{"type":"avatar","image_url":null},"app_id":"b5vkxvop","companies":{"type":"company.list","companies":[]},"location_data":{"type":"location_data","city_name":"San Jose","continent_code":"NA","country_name":"United States","latitude":37.3394,"longitude":-121.895,"postal_code":"95141","region_name":"California","timezone":"America/Los_Angeles","country_code":"USA"},"last_request_at":1478239113,"last_seen_ip":"216.151.183.47","created_at":1478238881,"remote_created_at":1478238744,"signed_up_at":1478238744,"updated_at":1478239113,"session_count":1,"social_profiles":{"type":"social_profile.list","social_profiles":[]},"unsubscribed_from_emails":false,"user_agent_data":"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0","tags":{"type":"tag.list","tags":[]},"segments":{"type":"segment.list","segments":[{"type":"segment","id":"57d2ea275bfcebabd516d963"},{"type":"segment","id":"57d2ea265bfcebabd516d962"}]},"custom_attributes":{"claimCount":"2","memberType":"claimant"}}],"scroll_param":"24ba0fac-b8f9-46b2-944a-9bb523dcd1b1"} 

{"type":"user.list","users": 

と下部に最後のピース:

,"scroll_param":"24bd0rac-b2f9-46b2-944a-9zz543dcd1b1"} 

これら2つを削除すると、必要なデータが残っているだけですそれを解析して改行で区切られた形式にするためには、どんなフィルターが必要です。う

.[] 

結果:あなただけコピーし、最終ラインに近いブラケットへの最初のオープンブラケットからすべてを貼り付ける場合

You can see for yourself by playing around with this tool、しかし、それは「コンパクト出力」を設定し、フィルタを適用、あなたがここで見るもののようでin a nice and neat newline delimited format like you see here.、また、ここではリンクではありません。

{"type":"user","id":"581c13632f25960e6e3dc89a","user_id":"ieo2e6dtsqhiyhtr","anonymous":false,"email":"[email protected]","name":"Joe Martinez","pseudonym":null,"avatar":{"type":"avatar","image_url":null},"app_id":"b5vkxvop","companies":{"type":"company.list","companies":[]},"location_data":{"type":"location_data","city_name":"Houston","continent_code":"NA","country_name":"United States","latitude":29.7633,"longitude":-95.3633,"postal_code":"77002","region_name":"Texas","timezone":"America/Chicago","country_code":"USA"},"last_request_at":1478235114,"last_seen_ip":"66.87.120.30","created_at":1478234979,"remote_created_at":1478234944,"signed_up_at":1478234944,"updated_at":1478235145,"session_count":1,"social_profiles":{"type":"social_profile.list","social_profiles":[]},"unsubscribed_from_emails":false,"user_agent_data":"Mozilla/5.0 (Linux; Android 6.0.1; SM-G920P Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.68 Mobile Safari/537.36","tags":{"type":"tag.list","tags":[]},"segments":{"type":"segment.list","segments":[{"type":"segment","id":"57d2ea275bfcebabd516d963"},{"type":"segment","id":"57d2ea265bfcebabd516d962"}]},"custom_attributes":{"claimCount":"1","memberType":"claimant"}} 
{"type":"user","id":"581c22a19a1dc02c460541df","user_id":"1o3helrdv58cxm7jf","anonymous":false,"email":"[email protected]l.com","name":"Joe Coleman","pseudonym":null,"avatar":{"type":"avatar","image_url":null},"app_id":"b5vkxvop","companies":{"type":"company.list","companies":[]},"location_data":{"type":"location_data","city_name":"San Jose","continent_code":"NA","country_name":"United States","latitude":37.3394,"longitude":-121.895,"postal_code":"95141","region_name":"California","timezone":"America/Los_Angeles","country_code":"USA"},"last_request_at":1478239113,"last_seen_ip":"216.151.183.47","created_at":1478238881,"remote_created_at":1478238744,"signed_up_at":1478238744,"updated_at":1478239113,"session_count":1,"social_profiles":{"type":"social_profile.list","social_profiles":[]},"unsubscribed_from_emails":false,"user_agent_data":"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0","tags":{"type":"tag.list","tags":[]},"segments":{"type":"segment.list","segments":[{"type":"segment","id":"57d2ea275bfcebabd516d963"},{"type":"segment","id":"57d2ea265bfcebabd516d962"}]},"custom_attributes":{"claimCount":"2","memberType":"claimant"}} 

だから私は必要なもの、私は私が使用したのと同じ方法で適用することができ、フィルタである[]すべてのテキストを引き出しています。最初のオープンブラケットの前に(上記で強調したように)終わりに閉じた括弧の前のすべてのテキストと同様に。

最終的な問題がどこに来るのですか?私は方程式から最終的なテキストを必要としていますが、まだスクロールパラメータとして知られている文字列と数字が必要です。これは、APIで必要なすべてのデータを完全に取得するために、すべてのデータが入るまで、コマンドラインから生成された新しいスクロールパラメータを継続的に使用する必要があるからです。

最初の呼び出しは、 :

$ curl -s https://api.program.io/users/scroll -u 'dG9rOmU5NGFjYTkwXzliNDFfNGIyMF9iYzA0XzU0NDg3MjE5ZWJkZDoxOjA=': -H 'Accept:application/json' 

しかし、中にすべての情報を取得するordereに、私は次のようになります別々の呼び出しのためにそのスクロールパラメータが必要になります。私は、テキストを取り除く必要がありながら

ので
curl -s https://api.intercom.io/users/scroll?scroll_param=foo -u 'dG9rOmU5NGFjYTkwXzliNDFfNGIyMF9iYzA0XzU0NDg3MjE5ZWJkZDoxOjA=': -H 'Accept:application/json' >scroll.json 

改行をデリミートに入れるためにパラメータを含むブロブ私がまだそれが空になるまで実行し続ける別のスクリプトにループバックすることが何であれ抽出する必要があります。

これを回避するためのアドバイスをお聞きしたいと思います。

+0

サードパーティのサイトではなく、質問自体の[mcve]にすべての関連コードを入力してください。 –

+0

本当ですか?本当に違いはありますか?私は実際にダイムできるフォーマットで簡単にそこに座っているときに、すべてをフォーマットしてすべてをフォーマットしようとしていますか? – wizkids121

+0

そのサイトがダウンしたら?この質問の今後の読者は何をしますか?データが何であるべきかについて彼らの想像力を使用しますか? –

答えて

0

コメントを投稿した他の人たちと同じように、特定の質問の詳細を理解していないようですが、jqを使って改行で区切られたJSONを発行する方法(改行が続き、改行が追加されていない)場合、答えは簡単です。-cオプションを指定して、そして-rオプションを指定しないでjqを使用します。

0

あなたのデータのぞんざいな検査から、フィルタ

.users[] 

をロードするためにあなただけのユーザーデータを与えると、フィルタ

.scroll_param 

だけスクロールパラメータを返します。データをファイルに格納する場合は、各フィルタに対してjqを1回呼び出すことができますが、データをストリーミングする必要がある場合は、単に,演算子を使用して別の値を返すことができます。例えば

.scroll_param 
, .users[] 

あなたが生成されます-cオプションJQとともに、そのフィルタを使用する場合は

"24ba0fac-b8f9-46b2-944a-9bb523dcd1b1" 
{"type":"user","id":"581c13632f25960e6e3dc89a","user_id":"ieo2e6dtsqhiyhtr",... 
{"type":"user","id":"581c22a19a1dc02c460541df","user_id":"1o3helrdv58cxm7jf",... 
おそらく

JQからの出力はcurl呼び出しで使用するための最初の行を取り込むことができ読み込むスクリプトなどで出力残りのデータをロードしたファイルに置きます。

これが役に立ちます。

関連する問題