【问题标题】:AttributeError: 'str' object has no attribute 'keys' error in getting json object keysAttributeError:'str'对象在获取json对象键时没有属性'keys'错误
【发布时间】:2019-07-30 02:34:33
【问题描述】:

我正在尝试将 json 对象转换为 csv 文件。当我传递 obj 并打印它时,它工作得很好。但是当我从#Problem 行继续时,我得到一个AttributeError:'str' 对象没有属性'keys'。 我通过了完全相同的对象。如何修复此错误并让它正常运行?

import json
import csv
import os

def flattenjson( b, delim ):
    val = {}
    for i in b.keys():
        if isinstance( b[i], dict ):
            get = flattenjson( b[i], delim )
            for j in get.keys():
                val[ i + delim + j ] = get[j]
        else:
            val[i] = b[i]
    return val

jjj = {
    "pk": 22,
    "model": "auth.permission",
    "fields": {
      "codename": "add_message",
      "name": "Can add message",
      "content_type": 8
   }
 }

print(flattenjson(jjj , "__" ))
#Problem
input = map( lambda x: flattenjson( x, "__" ), jjj )

columns = [ x for row in input for x in row.keys() ]
columns = list( set( columns ) )

with open( 'sad.csv', 'wb' ) as out_file:
    csv_w = csv.writer( out_file )
    csv_w.writerow( columns )

    for i_r in input:
        csv_w.writerow( map( lambda x: i_r.get( x, "" ), columns ) )

【问题讨论】:

    标签: python json csv export-to-csv


    【解决方案1】:

    在您的 lambda 函数中迭代时,您给出的唯一键被视为字符串

    以下是可能适合您的解决方案。

    编辑了代码而不是将唯一的键作为参数传递我正在传递一个新的字典。

    input = map( lambda x: flattenjson({x: jjj[x]}, "__" ), jjj )
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2020-12-18
      • 2018-03-15
      • 1970-01-01
      • 2021-01-15
      相关资源
      最近更新 更多