如何使用云函数读取云存储中的 json 文件 - python

How to read json file in cloud storage using cloud functions - python

需要使用云函数 (python) 读取 GCS 存储桶中存在的 json 文件数据。 我已将所需的 json 数据上传到存储桶并尝试 运行 云功能。

输入json文件数据:

{"count":15,"data":[{"P_ID":21.0,"P_NAME":"MMME","TZ":"PST","DATE_MODIFIED":"2005-10-14 00:00:00"}]}

代码如下:

    from google.cloud import storage
    import base64
    import json
    import os
    
def hello_gcs(event, context):
    """
    Triggered by a change to a Cloud Storage bucket.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    print("in CF")  
    print("event", event)

    file_name = event['name']
    bucket_name = event['bucket']
    client = storage.Client()
    bucket = client.get_bucket(bucket_name)
    file_blob = storage.Blob(file_name, bucket)
    download_data = file_blob.download_as_string().decode()
    jsondata = {}
    jsondata = download_data
    print("download_data : ", download_data)
    print("jsondata := ", jsondata)
    print(jsondata['count'])

请指正。我没有得到代码中显示的数据。 这只是为了测试云功能,一旦它正常工作,我需要实现其他功能。

在事件触发时使用的函数,例如,当对象写入 Cloud Storage 时。但是你只有事件,没有内容。有了事件数据,您就拥有了下载文件和处理文件所需的一切。

这是工作代码。将下载文件转换为 json 对象并访问字段。

from google.cloud import storage
import base64
import json
import os

def hello_gcs(event, context):
    """
    Triggered by a change to a Cloud Storage bucket.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    print("in CF")  
    print("event", event)

    file_name = event['name']
    bucket_name = event['bucket']
    client = storage.Client()
    bucket = client.get_bucket(bucket_name)
    file_blob = storage.Blob(file_name, bucket)
    download_data = file_blob.download_as_string().decode()
    print("download_data : ", download_data)
    """
    jsondata = {}
    jsondata = download_data
    """
    jsondata = {}
    #convert string to  object
    jsondata = json.loads(download_data)
    print("jsondata => ", jsondata)
    print(jsondata['count'])