2016-09-26 118 views
0

我有如下所示的格式的多个单个JSON对象非常大的JSON文件。我试图将其转换为CSV,以便每行都是JSON对象中的外部id /名称/字母表和一组转换:id/name/alphabet。对于单个JSON对象中的所有id /名称/字母集合,都会重复此操作。因此,从下面的对象中,应该创建2行,其中第一行是(外部)id/name/alphabet和第一个id /名称/转换字母表。第二行再次是(外部)id/name/alphabet,现在是转换的第二个id /名称/字母表。JSON来CSV转换

重要的一点是,该文件中的某些对象可以有50/60转换ID /名称/拼音对向上。

我到目前为止所尝试的是首先扁平化JSON对象,导致像conversion_id_0和conversion_id_1等关键字......所以我可以将外部映射为其始终常量,但我不确定如何映射每个对应的数字集成为一个单独的行。

任何帮助或洞察力将不胜感激!

[ 
    { 
     "alphabet": "ABCDEFGHIJKL", 
     "conversion": [ 
      { 
       "alphabet": "BCDEFGHIJKL", 
       "id": 18589260, 
       "name": [ 
        "yy" 
       ] 
      }, 
      { 
       "alphabet": "EFGHIJEFGHIJ", 
       "id": 18056632, 
       "name": [ 
        "zx", 
        "cd" 
       ] 
      } 
     ], 
     "id": 23929934, 
     "name": [ 
      "x", 
      "y" 
     ] 
    } 
] 
+0

你尝试过什么?社区不是为了解决任务,当你遇到困难或耗尽“燃料”时需要帮助 – sb0709

+1

尽管你已经用广义的术语说了你到目前为止所尝试的内容,但最好是发布你目前为止的代码并试图解释它在哪里破坏....说了这么多之后,可以用很多方式弹出字符串的最后一个字符,在写入行时可以用作行索引。例如my_string [-1] –

+0

检查验证码:http://stackoverflow.com/a/1872081/2027457 – sb0709

回答

0

你的问题不清楚究竟从输入JSON数据到CSV文件的行映射,所以我猜对应该发生什么时,有与内部或外部对象相关联的不止一个“名” 。

无论如何,希望下面将给你如何解决这样问题的总体思路。

import csv 

objects = [ 
    { 
     "alphabet": "ABCDEFGHIJKL", 
     "id": 23929934, 
     "name": [ 
      "x", 
      "y" 
     ], 
     "conversion": [ 
      { 
       "alphabet": "BCDEFGHIJKL", 
       "id": 18589260, 
       "name": [ 
        "yy" 
       ] 
      }, 
      { 
       "alphabet": "EFGHIJEFGHIJ", 
       "id": 18056632, 
       "name": [ 
        "zx", 
        "cd" 
       ] 
      } 
     ], 
    } 
] 

with open('converted_json.csv', 'wb') as outfile: 
    def group(item): 
     return [item["id"], item["alphabet"], ' '.join(item["name"])] 

    writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC) 
    for obj in objects: 
     outer = group(obj) 
     for conversion in obj["conversion"]: 
      inner = group(conversion) 
      writer.writerow(outer + inner) 

CSV文件的内容而产生:

23929934,"ABCDEFGHIJKL","x y",18589260,"BCDEFGHIJKL","yy" 
23929934,"ABCDEFGHIJKL","x y",18056632,"EFGHIJEFGHIJ","zx cd" 
+0

谢谢!这正是我正在寻找。我不认为保持json结构的原样,只是访问“转换”内的每个对象。我试图完成这在平坦了json后遇到了一些麻烦。 – lucas305

+0

不客气,请参阅[_当某人回答我的问题时该怎么办?_](http://stackoverflow.com/help/someone-answers) – martineau