如何在CSV下表示JSON对象

时间:2017-01-30 15:30:52

标签: javascript python json csv export-to-csv

我想将JSON对象导出到CSV文件,子字段的子字段可能由对象数组填充,但我不知道如何用CSV表示嵌入数据。

2 个答案:

答案 0 :(得分:2)

这归结为将半结构化(树状)数据映射到表格数据。由于阻抗不匹配,这一点都不重要。

在实践中常用(和教授)有几种方法,并且有广泛的学术研究,主要是针对XML建立的,但原则上也可以应用于JSON。或多或少的方法归结为:

  • Ad-hoc(基于模式)映射
  • 边缘粉碎
  • 树编码

首先,如果您的数据遵循常规模式(如模式),则可以设计ad-hoc映射,例如,可以将每个叶子(值)映射到CSV中的列。您可以使用点保留有关结构的信息,假设字段中尚未使用点。

例如:

{
  "foo" : {
    "bar" : 10
  },
  "foobar" : "foo"
}

可以映射到:

| foo.bar | foobar |
|---------|--------|
|  10     |  foo   |

比较棘手的部分是游戏中有数组。如果您有大量类似的对象,则可以将它们设置为输出CSV中的所有行:

{
  "objects" : [
    {
      "foo" : {
        "bar" : 10
      },
      "foobar" : "foo"
    },
    {
      "foo" : {
        "bar" : 40
      },
      "foobar" : "bar"
    },
    {
      "foo" : {
        "bar" : 50
      },
      "foobar" : "bar"
    }
  ]
}

可以映射到:

| objects.pos | objects.foo.bar | objects.foobar |
|-------------|-----------------|----------------|
|       1     |      10         |     foo        |
|       2     |      40         |     bar        |
|       3     |      50         |     bar        |

这种方法最简单,因为输出CSV仍然易于理解,但它需要为每个用例再次设计它以将其调整为您的数据,特别是对于数组中的不同排列。

从理论的角度来看,这种第一种临时方法称为规范化数据,即将其带入第一范式或更高级别。

还有其他更通用的方法,例如边缘粉碎和树编码。他们可能因为你的用例而过度使用它,因为解码它们需要相当多的工作,所以它们更适合在关系数据库之上实现复杂的XML查询。

简而言之,通过边缘粉碎,您可以为每种类型创建一个表(CSV文件)(使用JSON,可以是数字,字符串,布尔值等)来存储树叶,并使用一个表来存储边缘原始的JSON树。

使用tree encoding,您只能使用一个智能存储树的所有节点和叶子的单个表(CSV文件)。同样,它针对XML进行了调整,但可能会进行调整。

JSON比XML更年轻,所以我不确定在映射到表上已经进行了多少研究 - 尽管一般原则可能也存在专门针对JSON而不是XML的一般映射很相似。

答案 1 :(得分:1)

csv不像json那样富有表现力。但是有很多方法可以伪造csv中的json结构。例如:

https://konklone.io/json/?id=a624ffaa84db538b4a10465c72bf393d

更多相关内容: http://blog.appliedinformaticsinc.com/how-to-parse-and-convert-json-to-csv-using-python/