{
"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 。(我正在尝试将多维数据转换为 2d)。我正在使用 gson 来达到我的目的。我无法使用 gson。 fromgson() 函数到带有模板的对象映射,因为它应该是通用的。
我知道我们可以使用 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());
}
}
}
最佳答案
如果你有一个映射到 json 的对象,你可以通过反射来实现这一点。
使用gson/jackson将json转换为java对象
通过迭代类使用反射附加字段并获取您感兴趣的任何字段。
通过从目标对象获取值来通过反射附加值。
更多详细信息请参阅下面我的博客文章:
vcfvct.wordpress.com/2015/06/30/converting-nested-json-files-to-csv-in-java-with-reflection/
关于java - 在java中将嵌套Json文件转换为CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18007858/