【问题标题】:Error in parsing .json file using Python使用 Python 解析 .json 文件时出错
【发布时间】:2015-02-21 05:48:38
【问题描述】:

我收到以下错误。什么意思?

AttributeError: 'bool' object has no attribute 'decode'

在代码行中:writer.writerow({k:v.decode('utf8') for k,v in dictionary.iteritems()})

我的代码如下:

import json
import csv

def make_csv(data):
    fname = "try.csv"
    with open(fname,'wb') as outf:
        dic_list = data['bookmarks']
        dictionary =  dic_list[0]
        writer = csv.DictWriter(outf,fieldnames = sorted(dictionary.keys()), restval = "None", extrasaction = 'ignore')
        writer.writeheader()

        for dictionary in dic_list:
            writer.writerow({k:v.decode('utf8') for k,v in dictionary.iteritems()})
    return


def main():
    fil = "readability.json"
    f = open(fil,'rb')
    data = json.loads(f.read())
    print type(data)
    make_csv(data)

json 文件如下所示:

{ "bookmarks" : [{..},{..} ..... {..}],
  "recommendations" : [{..},{..}...{..}]
} 

其中[..] = 列表和{..} = 字典

编辑:

上述问题已解决,但是当我运行上述代码时,生成的 CSV 文件有一些差异。有些行是随机粘贴的,即在 .csv 文件的不同标题下。有什么建议吗?

【问题讨论】:

  • 在某些时候,v 的值是一个布尔值(True 或 False),因此您尝试执行 True.decode()False.decode(),但这是行不通的。我希望这是一些现有问题的重复。
  • 我不明白 v 是如何布尔的,在任何时候。它是字符串。键的值。
  • 只有一个地方需要解码,那就是v.decode('utf8')。错误显示'bool' object has no attribute 'decode'。所以v 的值可能就是那个bool 对象,这意味着它要么是True 要么是False(因为没有任何其他的bool 对象)。
  • 好的。我查看了json文件。这里有一些空值被翻译成False

标签: python json


【解决方案1】:

Somewhere 在您的 readability.json 文件中,您有一个布尔值条目,例如 truefalse(在 JSON 中),转换为 Python TrueFalse对象。

你不应该首先使用decode(),因为json.loads()已经为字符串生成Unicode值。

由于这是 Python 2,您希望将数据编码为 UTF-8。首先将您的对象转换为unicode

writer.writerow({
    k: unicode(v).encode('utf8')
    for k ,v in dictionary.iteritems()
})

将现有的 Unicode 字符串转换为 unicode 是无操作的,但对于整数、浮点值、None 和布尔值,您将获得可以编码为 UTF-8 的漂亮 Unicode 表示:

>>> unicode(True).encode('utf8')
'True'

【讨论】:

  • 你能建议我一种读取 BIG .json 文件的方法吗?我找不到任何合适的代码来帮助我。我的文件是 5MB。但是,为了运行代码,我手动删除了很多数据,以便我可以解析并查看它是否有效。我能做什么?
  • @SilentSpy:标准库json模块只能一次性解析整个文件。有关迭代解析选项,请参阅 Iteratively parse JSON file
  • @SilentSpy:或者,将 separate JSON 对象写入文件,并使用换行符作为分隔符。请参阅Loading and parsing a JSON file in Python 了解如何读取此类文件。
  • @MartjinPieters:谢谢。
  • 解析的 .csv 文件有错误。一些行随机粘贴在列下方。我该如何排序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2018-04-16
  • 1970-01-01
  • 2023-04-02
  • 2015-12-25
相关资源
最近更新 更多