从bucket(Google云存储)获取文件类型json,上传并保存到VM实例中

2024-05-15 07:59:15 发布

您现在位置:Python中文网/ 问答频道 /正文

为了从bucket中读取一个新文件(json内容)并使用云函数将其发送到vm实例,我尝试了以下代码,但我得到了以下错误

import requests
import json
import ndjson
from google.cloud import storage

def hello_gcs(data, context):
    """Background Cloud Function to be triggered by Cloud Storage.  
    Args:
        data (dict): The Cloud Functions event payload.
        context (google.cloud.functions.Context): Metadata of triggering event.
    Returns:
        None; the file is sent as a request to 
    """
    print('Bucket: {}'.format(data['bucket']))
    print('File: {}'.format(data['name']))

    client = storage.Client()
    bucket = client.get_bucket(format(data['bucket']))
    blob = bucket.get_blob(format(data['name']))

    contents = blob.download_as_string()

    headers = {
        'Content-type': 'application/json',
    }

    data = ndjson.loads(contents)
    print(data)
    response = requests.post('10.0.0.2', headers=headers, data=data)
    return "Request has been sent"

Error:
Traceback (most recent call last): File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 383, in run_background_function _function_handler.invoke_user_function(event_object) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function return call_user_function(request_or_event) File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 214, in call_user_function event_context.Context(**request_or_event.context)) File "/user_code/main.py", line 30, in hello_gcs data = ndjson.loads(contents) File "/env/local/lib/python3.7/site-packages/ndjson/api.py", line 14, in loads return json.loads(*args, **kwargs) File "/opt/python3.7/lib/python3.7/json/__init__.py", line 361, in loads return cls(**kw).decode(s) File "/env/local/lib/python3.7/site-packages/ndjson/codecs.py", line 9, in decode return super(Decoder, self).decode(text, *args, **kwargs) File "/opt/python3.7/lib/python3.7/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/opt/python3.7/lib/python3.7/json/decoder.py", line 353, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

Tags: inpyeventjsonclouddatabucketlib
1条回答
网友
1楼 · 发布于 2024-05-15 07:59:15

这个错误对我来说似乎很清楚:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

您的文件可能不包含有效的json(在本例中可能是ndjson)

此外,您还可以发布到“internal_IP_of_vm_instance”,这永远都不是有效的url

相关问题 更多 >