【问题标题】:Python: JSON to CSV - special array handlingPython:JSON 到 CSV - 特殊数组处理
【发布时间】:2017-10-11 12:41:29
【问题描述】:

我正在使用此 JSON 到 CSV 转换器将我的 JSON 数据转换为 CSV,我可以在 Excel 中进一步处理: https://github.com/vinay20045/json-to-csv

我的 JSON 数据的结构如下所示:https://pastebin.com/rPkqcXiF

{
  "page": 1,
  "pages": 1,
  "limit": 100,
  "total": 20,
  "items": [
    {...}
  ]
}

在第 64 行有一个项目数组。第一项显示在第 65 到 92 行。 如果可用,下一个具有相同内容的数组将在第 93 行开始。

我现在的问题是:我从 REST API 获取 2 个数据集。 其中一个数据集有一个包含 2 个项目的项目数组。然后,python 脚本将为新项目生成更多列。第一个数组是 items_0,接下来是 items_1,依此类推。 您可以看到我的意思是在 Excel 中使用格式查看的示例:Pastebin EqGHX07U(此处仅允许 2 个链接)

我不想在数组元素数量增加时生成新列,而是希望在 csv 的标题中只包含一组列。当数组元素的数量增加时,应该会像以前一样使用所有其他数据生成一个新行 - 只有新数组的数据发生变化。

您可以看到我的意思是在 Excel 中查看格式的示例:Pastebin QLnaiqDs(此处仅允许 2 个链接)

如果你能在这里帮助我,那就太棒了!一些如何解决的提示非常感谢 - 虽然我不习惯 python :(

非常感谢!

【问题讨论】:

    标签: python json excel rest csv


    【解决方案1】:

    如果我理解正确,这里有一个方法。想一想:

    headers = []
    csv_text = ""
    
    def add_empty_fields():
        """Adds ';' char in each line in order to have empty fields for each new header"""
        csv_lines = csv_text.split("\n")
        csv_text = ""
        for line in csv_lines[:-1]:
            csv_text+=line+";\n"
        csv_text+=csv_lines[-1]
    
    
    def add_ordered_data(json_parsed_to_dict):
        #Get headers of json
        tmp_list = set(json_parsed_to_dict.keys())
        #Add ordered data with headers list
        for h in headers:
            if h in tmp_list:
                tmp_list.discard(h)
                csv_text+=json_parsed_to_dict[h]+";"
            else:
                csv_text+=";"
    
        #Add new headers behind it 
        for new_header in tmp_list:
            headers.append(new_header)
            csv_text+=json_parsed_to_dict[h]+";"
            #add_empty_fields()
            """ You can do csv_lines.replace("\n",";\n") here instead of add_empty_fields hahah """
    
        csv_text+="\n"
    

    我都是直接写在这里的,可能有一些失败,但我希望这对你有帮助

    【讨论】:

      【解决方案2】:

      除了使用 node 元素处理 JSON 数据。该脚本还可以处理 没有 node 元素作为输入的 JSON 数组。在 repo 中参考readme 文件和sample_2

      因此,您可以预处理输入,从 API 中获取所有项目并在将列表提供给转换器之前将它们合并。喜欢...

      data_to_be_processed = items_from_api_1 + items_from_api_2

      您可以将此预处理器编写为独立模块或在第 77 行之后修改我的脚本。

      希望对你有帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 2014-12-13
        • 1970-01-01
        相关资源
        最近更新 更多