{
"Employee": [
{
"empMID": "mock:1",
"comments": [],
"col1": "something",
"contact": [{"address":"2400 waterview", "freetext":true}
],
"gender": "male"
},
{
"empMID": "mock:2",
"comments": [],
"col1": "something",
"contact": [{"address":"2200 waterview", "freetext":true}
],
"gender": "female"
}
],
"cola": false,
"colb": false
}
这是我的Json文件看起来。我需要转换这个json到一个csv。(我试图转换多维数据到二维)。我使用gson为我的目的。我不能使用gson。fromgson()函数来对象Map与模板,因为它应该是通用的。
我知道我们可以使用CDL将jsonarray转换为csv格式,但它在我的情况下不起作用。
我的csv格式看起来像
Employee*
empMID,comment.$,contact.address,contact.freetext,gender
mock:1,,2400 waterview,TRUE,male
mock:123,,2200 waterview,TRUE,female
colA#
TRUE
colB#
FALSE
我试着用google-GSON api来转换成这种格式。但是我不能转换成这种格式。我用 * 来表示它的json数组,用#来表示它的原始类型,用contact.address来表示另一个json数组中的嵌套数组。我在关联这个嵌套结构时遇到了问题。我可以像列一样递归地遍历所有的东西。提前感谢
public static void main(String[] args) throws IOException{
BufferedReader reader=null;
StringBuilder content=null;
String result=null;
reader = new BufferedReader(new FileReader("temp.json"));
String line = null;
content= new StringBuilder();
while ((line = reader.readLine()) != null) {
content.append(line);
}
reader.close();
result= content.toString();
JsonElement jelement = new JsonParser().parse(result);
printJsonRecursive(jelement);
}
public static void printJsonRecursive(JsonElement jelement){
if(jelement.isJsonPrimitive()){
System.out.println(jelement.getAsString());
return;
}
if(jelement.isJsonArray()){
JsonArray jarray= jelement.getAsJsonArray();
for(int i=0;i<jarray.size();i++){
JsonElement element= jarray.get(i);
printJsonRecursive(element);
}
return;
}
JsonObject jobject= jelement.getAsJsonObject();
Set<Entry<String, JsonElement>> set= jobject.entrySet();
for (Entry<String, JsonElement> s : set) {
printJsonRecursive(s.getValue());
}
}
}
4条答案
按热度按时间ycl3bljg1#
如果您有一个Map到json的对象,则可以通过反射来实现这一点。
1.使用gson/Jackson实现json到java对象转换
1.通过迭代类使用反射追加字段并获取您感兴趣的任何字段。
1.通过从目标对象获取值来附加反射值。
更多细节请看下面我的博文:
vcfvct.wordpress.com/2015/06/30/converting-nested-json-files-to-csv-in-java-with-reflection/
qaxu7uf22#
您没有打印
key
。这样应该可以修复它。您可以在这里处理
\n
。编辑
如果你想只打印一次重复的json对象的键,创建一个
Java bean
来保存数据和递归过程中的populate it
。一旦bean完成,在那里添加一个方法,以你想要的格式打印所有数据(只打印一次键,依此类推)。z0qdvdin3#
您可以使用json2flat库将JSON转换为CSV。
这个库不需要任何POJO的。它只是将JSON作为字符串,并以**
List<Object[]>
的格式返回JSON的2D表示。例如,对于JSON:
它给出输出:
uwopmtnx4#