首页 > 解决方案 > 将 JSON 输出发布到 PubSub 时出现问题。每个字段都添加了一个“u”

问题描述

我有一个脚本,它从芝加哥市提取并获取一个 json 文件,然后发布到 Pub Sub。一旦数据进入 pub sub,我就有了一个数据流模板,可以将数据拉入 Google Big Query。当我在脚本中打印输出时,最终数据移动到 BQ 失败。我在所有我认为会打乱现场比赛的领域前得到一个 u'。有没有其他人遇到过这个问题并且知道我的代码有什么问题以及如何删除“u”。我尝试了多种修复方法,但都没有奏效。下面列出了一个示例输出:

('_last_updt', '2010-07-21 14:50:53.0'), ('_length', '0.69'), ('_lif_lat', '41.985032613'),

我的代码如下:

from __future__ import unicode_literals
from sodapy import Socrata
import json
from io import StringIO
from google.oauth2 import service_account
from oauth2client.client import GoogleCredentials
from google.cloud import pubsub_v1
import time
import datetime
import urllib
import urllib.request
import argparse
import base64

credentials = GoogleCredentials.get_application_default()
# change project to your Project ID
project="xxxx"
# change topic to your PubSub topic name
topic="xxxx"


res = urllib.request.urlopen('https://data.cityofchicago.org/resource/8v9j-bter.json')
res_body = res.read()
traffic=json.loads(res_body)
publisher = pubsub_v1.PublisherClient()
topicName = 'projects/' + project + '/topics/' + topic
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project,topic)
for key in traffic:
        publisher.publish(topicName,str.encode(str(key)))
        print(key.items())

标签: pythonjsongoogle-bigquerypublish-subscribegoogle-cloud-pubsub

解决方案


您正在描述 Python 构造:Unicode 字符串以 u' 前缀显示。

看:

例如,使用“普通”字符串和 unicode 构建一个数组:

>>> [u'a', 'a']
[u'a', 'a']

不要太担心,它们是相同的字符串:

>>> u'a' == 'a'
True

现在,当您说“我在所有我认为会破坏字段匹配的字段前都出现了一个 u”。您在哪里看到这个?这是 Python 代码的一部分,还是您也看到这些 u' 出现在 BigQuery 网络用户界面上?

查看您发布的代码,似乎强制所有字符串为 Unicode from __future__ import unicode_literals

>>> "a"
'a'
>>> from __future__ import unicode_literals
>>> "a"
u'a'

推荐阅读