【问题标题】:Dumping a list of dictionary to JSON gives ValueError: Extra Data将字典列表转储到 JSON 会给出 ValueError: Extra Data
【发布时间】:2016-03-09 19:12:45
【问题描述】:

我在 python 上做作业,我试图将包含另一个字典列表的字典转储到 JSON 中。但是,在运行数据时,却报错了:

文件“D:\Users\XXXXX\Anaconda2\lib\json\decoder.py”,第 367 行,在解码中 raise ValueError(errmsg("额外数据", s, end, len(s))) ValueError:额外数据:第 1 行第 76 列 - 第 1 行第 1434 列(字符 75 - 1433)

这是 JSON 编写器上的代码 sn-p:

def savelist(self):
    data={}
    f = open('partjson.txt','w')
    for i in range(self.datacount):
        data.setdefault("data",[]).append({'name':self.namelist[i], 'numid':str(self.numidlist[i]), 'height':str(self.heightlist[i]), 'length':str(self.lengthlist[i])})
        json.dump(data,f)
    f.close()

输出的数据文件不符合预期,因为字典“数据”是多次输出而不是一开始只输出一次。

{"data": [{"length": "3", "numid": "1", "name": "first", "height": "2.0"}]}{"data": [{"length": "3", "numid": "1", "name": "first", "height": "2.0"}, {"length": "4", "numid": "2", "name": "second", "height": "3.0"}]}

你能告诉我我的方法有什么问题吗?谢谢

【问题讨论】:

    标签: python json dictionary


    【解决方案1】:

    您放错了json.dump(data, f) 的缩进位置。每个循环都会调用data.setdefault,创建所谓的“数据”字典条目。这会产生错误。代码应该是:

    def savelist(self):
    data={}
    f = open('partjson.txt','w')
    for i in range(self.datacount):
        data.setdefault("data",[]).append({'name':self.namelist[i], 'numid':str(self.numidlist[i]), 'height':str(self.heightlist[i]), 'length':str(self.lengthlist[i])})
    json.dump(data,f)
    f.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2013-06-07
      • 2014-02-26
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多