2017-07-19 6 views
1

bigqueryテーブルに文字列として保存されたjsonを照会する方法はありますか? は私がコラム(subscriptions)の値は、次のようになりますテーブルを持っている:bigqueryテーブルの文字列として保存されたjsonを照会する方法は?

{ 
    "data": [{ 
     "application_fee_percent": null, 
     "canceled_at": null, 
     "created": 1500476240, 
     "items": { 
      "data": [{ 
       "created": 1500476240, 
       "id": "s4nQMWJn4P1Lg", 
       "metadata": {}, 
       "object": "subscription_item", 
       "plan": { 
        "amount": 3, 
        "created": 1494270926, 
        "currency": "usd", 
        "livemode": true, 
        "metadata": { 
         "currentlySelling": "true", 
         "features": "{\"shipping\": true,\"transactionFee\":0.00}", 
         "marketingFeatures": "[\"Unlimited products\"]" 
        }, 
        "name": "Personal", 
        "object": "plan", 
        "statement_descriptor": null, 
        "trial_period_days": null 
       }, 
       "quantity": 1 
      }], 
      "has_more": false, 
      "object": "list", 
      "total_count": 1, 
      "url": "/v1/subscri3XwjA3" 
     }, 
     "livemode": true, 
     "metadata": { 
      "test": "596f735756976" 
     }, 
     "object": "suion", 
     "quantity": 1 
    }], 
    "has_more": false, 
    "object": "list", 
    "total_count": 1, 
    "url": "/v1/cutions" 
} 

にはどうすればapplication_fee_percentfeatures、およびmarketingFeaturesを選択することができますか?

createdについては、私は JSON_EXTRACT("subscriptions", "$.data[0].created") を試しましたが、nullを返しています。以下は

+0

です。あなたは助けてもらえますか? –

+1

ご注意:@を使用して、既に投稿に関わっているSOユーザにのみ返信することができます。そうでなければ、あなたのメッセージは予想される受信者に届きません。このサイトがどのように機能するのか、その周辺のルールは何かを学び、理解するためには、SOの詳細なヘルプをお読みください。私があなたの質問をチェックして戻ってくる:o) –

+1

あなたが共有したJSONが有効でない(https://jsonlint.com/に貼り付けてください)可能性がありますたぶん転記に間違いがない限り、JSON_EXTRACTを使用してください。 –

答えて

2

application_fee_percent created  currentlySelling features marketingFeatures  
null     1500476240 true    {'shipping': true,'transactionFee':0.00} ['Unlimited products'] 

を期待通りの結果があるBgQuery SQL(答えの下部にある注意に注意をしてください!)

#standardSQL 
WITH yourTable AS (
    SELECT ''' 
    { 
     "data": [{ 
      "application_fee_percent": null, 
      "canceled_at": null, 
      "created": 1500476240, 
      "items": { 
       "data": [{ 
        "created": 1500476240, 
        "id": "s4nQMWJn4P1Lg", 
        "metadata": {}, 
        "object": "subscription_item", 
        "plan": { 
         "amount": 2500, 
         "created": 1494270926, 
         "currency": "usd", 
         "id": "182463d635c6b6e43", 
         "interval": "month", 
         "interval_count": 1, 
         "livemode": true, 
         "metadata": { 
          "currentlySelling": "true", 
          "features": "{\'shipping\': true,\'transactionFee\':0.00}", 
          "marketingFeatures": "[\'Unlimited products\']" 
         }, 
         "name": "Personal", 
         "object": "plan", 
         "statement_descriptor": null, 
         "trial_period_days": null 
        }, 
        "quantity": 1 
       }], 
       "has_more": false, 
       "object": "list", 
       "total_count": 1, 
       "url": "/v1/subscri3XwjA3" 
      }, 
      "livemode": true, 
      "metadata": { 
       "test": "596f735630012756976" 
      }, 
      "object": "subscription", 
      "quantity": 1, 
      "start": 1500476240, 
      "status": "trialing", 
      "tax_percent": 0.0, 
      "trial_end": 1501685839, 
      "trial_start": 1500476240 
     }], 
     "has_more": false, 
     "object": "list", 
     "total_count": 1, 
     "url": "/v1/cutions" 
    } 
    ''' AS subscriptions 
) 
SELECT 
    JSON_EXTRACT_SCALAR(subscriptions, "$.data[0].application_fee_percent") AS application_fee_percent, 
    JSON_EXTRACT_SCALAR(subscriptions, "$.data[0].created") AS created, 
    JSON_EXTRACT_SCALAR(subscriptions, "$.data[0].items.data[0].plan.metadata.currentlySelling") AS currentlySelling, 
    JSON_EXTRACT_SCALAR(subscriptions, "$.data[0].items.data[0].plan.metadata.features") AS features, 
    JSON_EXTRACT_SCALAR(subscriptions, "$.data[0].items.data[0].plan.metadata.marketingFeatures") AS marketingFeatures 
FROM yourTable 

のためであることに注意してください:あなたのJSONがありますfeaturesmarketingFeaturesには無効です - 二重引用符で囲まれた二重引用符で構成されています - あなたのサンプルデータでこれを変更したことがわかりますが、その部分を修正する必要がありますそれを生の文字列の使用の

追加の例生成イオン:

#standardSQL 
WITH YourTable AS (
    SELECT R"""{ 
    "features": "{\"shipping\": true,\"productLimit\":5,\"discounts\": false,\"customDomain\": false, \"imageLimit\": 100,\"transactionFee\":0.03} " 
    }""" AS subscriptions 
) 
SELECT 
    JSON_EXTRACT_SCALAR(subscriptions, '$.features') AS features 
FROM YourTable 

結果はミハイル・Berlyant @これは昨日からの質問をフォローアップである

features  
{"shipping": true,"productLimit":5,"discounts": false,"customDomain": false, "imageLimit": 100,"transactionFee":0.03} 
+0

申し訳ありませんが、私は私の答えを削除しますので、基本的に同じことを投稿していたことを確認していない。 OPが2つの 'フィーチャー'フィールドに対して 'JSON_EXTRACT_SCALAR'を望むのは、文字列であると予想される場合です。 –

+0

ugh!私はPythonに依存していました。 –

+0

@ElliottBrossard - 問題はありません。数秒前にそれを取得して申し訳ありません。私を信じて - 多くの場合 - 直前に私は答えを投稿しようとしています - あなたの答えはちょうど来ましたので、私は投稿していません - ほとんどの場合、ほとんど同じです - 私はとてもそう思っています類似:o) –

関連する問題