将JSON输出发布到PubSub时出现问题。 'u'被添加到每个字段

时间:2018-11-13 03:11:56

标签: python json google-bigquery publish-subscribe google-cloud-pubsub

我有一个脚本,可以从芝加哥(如果是芝加哥)提取并抓取一个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())

1 个答案:

答案 0 :(得分:0)

您要描述的是Python结构:Unicode字符串以u'前缀显示。

请参阅:

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

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

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

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

现在,当您说“ 我在所有我认为弄乱了田径比赛的田地前面都得到一个u”之前。”在哪里看到?这是Python代码的一部分,还是在BigQuery网络用户界面上也看到了这些代码?

看您发布的代码,似乎迫使所有字符串都用from __future__ import unicode_literals编码为Unicode:

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