【问题标题】:python - convert encoded json into utf-8python - 将编码的 json 转换为 utf-8
【发布时间】:2016-03-10 23:58:11
【问题描述】:

我有几个 json 文件需要在 python 脚本中处理,尽管它似乎不是有效的 json 格式:

{
  'data': [

    {
     'ad_id': u'6038487',
     'adset_id': u'6038483800',
     'campaign_id': u'603763200',
     'created_time': u'2015-12-17T15:26:04+0000',
     'field_data': [
          {u'values': [u'Fahrrad'], u'name': u'what is your vehicle?'},
          {u'values': [u'Coco'], u'name': u'first_name'},
          {u'values': [u'Homer'], u'name': u'last_name'},
          {u'values': [u'aaa@hotmail.de'], u'name': u'email'},
          {u'values': [u'+490999999'], u'name': u'phone_number'}
          ], 'id': u'5655545710'
    },
    {
   'ad_id': u'39392400',
   'adset_id': u'39366200',
   'campaign_id': u'39363200',
   'created_time': u'2014-12-16T13:01:52+0000',
   'field_data': [
           {u'values': [u'Frankfurt'], u'name': u'in_welcher_stadt_m\xf6chtest_du_arbeiten?'},
           {u'values': [u'Auto'], u'name': u'what is your vehicle?'},
           {u'values': [u'Homer'], u'name': u'first_name'},
           {u'values': [u'abc'], u'name': u'last_name'},
           {u'values': [u'XYZ@gmail.com'], u'name': u'email'},
           {u'values': [u'0555555555'], u'name': u'phone_number'}
            ],
    'id': u'149809770'
    }
    ]
}
  1. 它有单引号而不是双引号
  2. 被编码(见u
  3. 一些字母被编码,例如\xf6 代表ö

理想情况下,json 应该可以通过 sn-p 读取:

import json
import pprint


with open('leads.json') as data_file:
    data = json.load(data_file)

pprint(data)

如何将输入的 json 转换为 utf-8 格式的有效 json?

【问题讨论】:

  • 那不是 JSON。可以使用 ast.literal_eval 将其读入 Python 对象。
  • 是的,你所拥有的实际上是一个打印的字典,而不是一个有效的 JSON 对象。
  • 但是有没有办法将其转换为有效的 json 格式?
  • 转成有效JSON的方法是先调用ast.literal_eval,再调用json.dump结果。

标签: python json encoding utf-8


【解决方案1】:

正如我所说,这不是 JSON,它是 Python 对象的打印表示(恰好看起来类似于 JSON)。要安全导入,可以使用ast.literal_eval

from pprint import pprint
import ast
with open('leads.json') as data_file:
       data = ast.literal_eval(data_file.read())
pprint(data)

【讨论】:

  • 谢谢,这似乎是一种改进,但仍然会产生错误:return compile(source, filename, mode, PyCF_ONLY_AST) File "", line 10 {'ad_id': u' 6038262487', 'adset_id'....
  • @Algina 你能提供有问题的文件吗?它适用于您提供的示例。
  • 用另一个块更新它。实际上,当我这样做时,我发现一个项目不是用单引号封闭的!这是原始数据中的一个问题,似乎是一团糟!无论如何,谢谢,它有帮助!
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 2011-06-26
  • 2014-02-02
  • 2017-05-18
  • 2012-01-15
  • 2011-01-28
  • 2021-07-11
  • 2015-08-15
相关资源
最近更新 更多