【问题标题】:converting unicode to json data in python在python中将unicode转换为json数据
【发布时间】:2018-04-05 13:05:40
【问题描述】:

我正在获取数据 = "{\"share_content\":\"dfbgfbfb\",\"campaign_media_url\":\"\",\"shorten_url\":null,\"media_shorten_url\":null,\"og_meta_data\":{\"site_name\":\"Inquirly\",\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"beta.inquirly.com\",\"type\":\"article\"},\"tw_meta_data\":{\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"@markethubs\",\"card\":\"summary_large_image\"},\"sms_content\":\"dfbgfbfb\",\"email_subject\":\"dfbgfbfb\",\"footer\":{\"fb_feed_name\":\"smartmbbs\",\"fb_feed_caption\":\"smartmbbs | VIA INQUIR.LY\",\"fb_description\":\"\",\"ln_title\":null}}"

当我尝试查找数据变量的类型时,我得到了<type 'unicode'>。 我尝试了使用json.loadsjson.dumps 的不同方法,但未能从数据中获取share_content 值。我遇到了不同的问题,例如字符串索引必须是整数等。

我的代码:

 campaign_data = dbsession.execute("SELECT campaign_data FROM campaign_details 
                 WHERE campaign_id = '%d'"%(218)).first()
 for  row in campaign_data:
   sms_content = row
   try:
     print sms_content
     print type(sms_content)
     gst = json.loads(sms_content)
     print type(gst)
     #print json_stng['share_content']
   except (ValueError, KeyError, TypeError): 
     print "JSON format error"
     print "smssss"

我从查询中获取上述数据变量为 sms_content[0]

【问题讨论】:

  • 向我们展示您尝试过的代码及其结果。看起来您要么有一个普通的 JSON 字符串,要么有一个双编码的 JSON 字符串。很难说,因为很难说你是在向我们展示 Python 文字还是原始值。
  • Unicode 与这个问题有什么关系?在任何情况下,REST API 几乎总是 Unicode,特别是 UTF8。到目前为止,几乎所有的网站都是 Unicode,例如这个网站返回 UTF8 页面。
  • @PanagiotisKanavos 它是 python 2 的内置 unicode 类型,在 python 3 中变成了 str
  • @FHTMitchell,这个问题中没有 Python 代码。
  • @PanagiotisKanavos <type 'unicode'>unicode 的 python 代表。除了 OP 所说的“unicode”之外,我什么也没说。

标签: python json unicode


【解决方案1】:

使用JSON module

例如:

import json
data = "{\"share_content\":\"dfbgfbfb\",\"campaign_media_url\":\"\",\"shorten_url\":null,\"media_shorten_url\":null,\"og_meta_data\":{\"site_name\":\"Inquirly\",\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"beta.inquirly.com\",\"type\":\"article\"},\"tw_meta_data\":{\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"@markethubs\",\"card\":\"summary_large_image\"},\"sms_content\":\"dfbgfbfb\",\"email_subject\":\"dfbgfbfb\",\"footer\":{\"fb_feed_name\":\"smartmbbs\",\"fb_feed_caption\":\"smartmbbs | VIA INQUIR.LY\",\"fb_description\":\"\",\"ln_title\":null}}"
print(json.loads(data))

输出:

{u'footer': {u'ln_title': None, u'fb_feed_name': u'smartmbbs', u'fb_description': u'', u'fb_feed_caption': u'smartmbbs | VIA INQUIR.LY'}, u'tw_meta_data': {u'description': None, u'title': None, u'url': u'https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html', u'image': None, u'site': u'@markethubs', u'card': u'summary_large_image'}, u'media_shorten_url': None, u'campaign_media_url': u'', u'og_meta_data': {u'site_name': u'Inquirly', u'description': None, u'title': None, u'url': u'https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html', u'image': None, u'site': u'beta.inquirly.com', u'type': u'article'}, u'sms_content': u'dfbgfbfb', u'email_subject': u'dfbgfbfb', u'shorten_url': None, u'share_content': u'dfbgfbfb'}

【讨论】:

  • 谢谢 rakesh...但是我尝试了上面的代码...但是我得到的字符串索引必须是整数错误...当我尝试将 share_content 打印为 data = json.loads(data) 时,打印数据['share_content']
  • 你在尝试上面提到的日期吗? type(data)json.loads(data) 之后打印什么?
  • 在 json.loads(data) 之后 type(data) 打印什么?
  • 仍然获取 unicode 和数据为 {"share_content":"dfbgfbfb","campaign_media_url":"","shorten_url":null,"media_shorten_url":null,"og_meta_data":{"site_name ":"Inquirly","description":null,"title":null,"url":"s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/…"},"tw_meta_data":{"description":null,"title":null,"url": "s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/…"}"
  • 显然你的数据已经被 json 编码了两次。 Q&D 解决方法也是对它们进行两次 json 解码,但 1/ 充其量是脆弱的,2/ 它不能解决“为什么这些数据被 json 编码两次”的根本问题。
【解决方案2】:

将 Unicode 转换为 utf-8 格式,然后您可以进行 json 转储

        data = "{\"share_content\":\"dfbgfbfb\",\"campaign_media_url\":\"\",\"shorten_url\":null,\"media_shorten_url\":null,\"og_meta_data\":{\"site_name\":\"Inquirly\",\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"beta.inquirly.com\",\"type\":\"article\"},\"tw_meta_data\":{\"description\":null,\"title\":null,\"url\":\"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html\",\"image\":null,\"site\":\"@markethubs\",\"card\":\"summary_large_image\"},\"sms_content\":\"dfbgfbfb\",\"email_subject\":\"dfbgfbfb\",\"footer\":{\"fb_feed_name\":\"smartmbbs\",\"fb_feed_caption\":\"smartmbbs | VIA INQUIR.LY\",\"fb_description\":\"\",\"ln_title\":null}}"
        print data.decode('utf-8')

输出:

    {"share_content":"dfbgfbfb","campaign_media_url":"","shorten_url":null,"media_shorten_url":null,"og_meta_data":{"site_name":"Inquirly","description":null,"title":null,"url":"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html","image":null,"site":"beta.inquirly.com","type":"article"},"tw_meta_data":{"description":null,"title":null,"url":"https://s3.amazonaws.com/campaign.ezeees.com/Ukb/a15Hh/index.html","image":null,"site":"@markethubs","card":"summary_large_image"},"sms_content":"dfbgfbfb","email_subject":"dfbgfbfb","footer":{"fb_feed_name":"smartmbbs","fb_feed_caption":"smartmbbs | VIA INQUIR.LY","fb_description":"","ln_title":null}}

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2013-05-04
    • 2011-06-12
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多