我有一个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个条目,最终副本中有成千上万个条目。
任何帮助将不胜感激!
答案 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文件中检测所有类型。