首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写和读取json数据云函数和云存储

编写和读取json数据云函数和云存储
EN

Stack Overflow用户
提问于 2022-02-21 15:42:23
回答 1查看 771关注 0票数 0

我有第一个云函数,在这个函数中,我正在编写来自云存储中API的响应:

代码语言:javascript
复制
  api_response = service.accounts().api().execute()
  bucket_name = 'my_bucket'
  date = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
  bucket = storage_client.bucket(bucket_name)
  destination_blob_name = 'stuff_here/{}'.format(date)
  blob = bucket.blob(destination_blob_name)
  blob.upload_from_string("{}".format(api_response))

当在云存储中查看我的文件时,我有如下所示:

代码语言:javascript
复制
{'items': [
{'path': 'foo/12066407/stuff/12396182', 'accountId': '34858', 'containerId': '475663', 'name': 'blablabla', 'usageContext': ['stuff'], 'fingerprint': '1621433559139', 'Url': 'https://randomurl.com/#/randomPath/path/12066407/id?apiLink=blabla'}]}

在这个例子中,数组中只有一个对象。在实际的用例中,所有的对象都是一致的。

那么我希望能够从另一个云函数中读取这个文件。

我有以下代码:

代码语言:javascript
复制
bucket = client.get_bucket('my_bucket')
blob = bucket.get_blob('filename')
content = blob.download_as_string().decode()
print(StringIO(content))
print(json.dumps(content))
my_df = pd.read_json(StringIO(content))

对于第一次打印,我有Content: <_io.StringIO object at 0x3ef722b287d0>。对于第二次打印,我复制了我文件中的内容,当试图在df中传递它时,我有以下错误ValueError: Expected object or value

最终,我希望能够提取其中一个键值对。

我是否应该在第一个函数中以不同的方式编写API的结果,或者如何使用第二个函数来读取它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-21 21:37:48

很多事情。

首先,StringIO返回一个可以读写的对象。所以,如果打印对象,在输出中有内存引用,这是完全可以的。

然后,您有一个要在JSON中解析的字符串。您必须使用json.loads(content),而不是转储(转储是用来以JSON格式将dict写入字符串)。

最后,如果您的文件(在中)看起来很奇怪,那么JSON :键和值必须有双引号,而您的示例中只有简单的引用。您不能在代码中加载损坏的JSON,在将其写入GCS之前,请确保API答案是有效的JSON。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71209123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档