CSV到JSON并添加标题

时间:2018-07-13 20:26:17

标签: json csv type-conversion

我有一个csv文档:

{
    "epsilon_id": 194029423,
    "weather": "cloudy",
    "temperature": 27
},
{
    "epsilon_id": 932856192,
    "weather": "sunny",
    "temperature": 31
}

我想知道是否有一种工具可以将其变成有效的json,其中字段 epsilon_id 是数据的标题。

例如:

{
    194029423: {
        "weather": "cloudy",
        "temperature": 27
    },
    932856192: {
        "weather": "sunny",
        "temperature": 31
    }
}

我希望它是一个可以运行的程序(无论使用哪种语言),因为我的测试样本中有1,000个条目,最终副本中有成千上万个条目。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您正在研究JSON转换,当然可以通过自定义编程来实现。我可以向您说明如何在Java中实现此目标,但是从功能上讲,它对于您选择的任何编程都是相同的。

您输入的json将如下所示:

[{
    "epsilon_id": 194029423,
    "weather": "cloudy",
    "temperature": 27
},
{
    "epsilon_id": 932856192,
    "weather": "sunny",
    "temperature": 31
}]

使用流行的Jackson库在Java中进行解析时,您将获得以下类的对象列表:

class Input
{
    @JsonProperty(access = Access.WRITE_ONLY)
    String epsilon_id,
    String weather,
    int temperature
}

然后创建一个地图对象Map<Integer, Input>,填充如下数据:

Map<Integer, Input> map = new HashMap<>();
for(Input obj : listOfInputs){
 map.put(obj.epsilon_id, obj)
};

再次使用Jackson序列化您的结果图以获得所需的输出格式:

{
    194029423: {
        "weather": "cloudy",
        "temperature": 27
    },
    932856192: {
        "weather": "sunny",
        "temperature": 31
    }
}

如果您对Java和Jackson的JSON解析不是很熟悉,那么我会发现此tutorial带有代码示例,这将为您提供开端。

答案 1 :(得分:0)

import csv, json, os
# rename this file or pass it in as process.argv[2] 
#  then pipe output into another file. or 
with open("./foo.csv") as f: 
  output = {} 
  for line in csv.DictReader(f):
    key = line.pop("epsilon_id")
    if output.has_key(key):
      print("Duplicate Id -> {} ".format(key))
    output[key] = line

#  then pipe this output into another file.
print(json.dumps(output, indent=2))
# or write a file
with open("/tmp/foo.json",'w') as f:
    json.dump(output, f)

Python非常简单:它将从csv文件中检测所有类型。

演示:https://repl.it/@markboyle/UsableIcyFeed