java - 在java中将嵌套Json文件转换为CSV

标签 java json csv gson

    {
    "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 的对象,你可以通过反射来实现这一点。

  1. 使用gson/jackson将json转换为java对象

  2. 通过迭代类使用反射附加字段并获取您感兴趣的任何字段。

  3. 通过从目标对象获取值来通过反射附加值。

更多详细信息请参阅下面我的博客文章:

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/

相关文章:

java - 验证方法调用而不在 Spy 上执行其实际实现

java - 我可以在 nginx 服务器上部署我的 .war 吗

json - 无法从 https web api 获取数据

PHP:如何从 JSON 数组中获取属性?

php - 用 PHP 查询 MySQL

python - 以编程方式从 Excel 电子表格中提取数据

mysql - 在 MySQL 中加载数据文件不起作用

java - 在方法中修改了对象内容,但对象哈希码保持不变

Java:外部类和内部类之间的同步

sql - 其中包含逗号分隔值的列中的值