将JSON转换为CSV

时间:2013-12-04 23:14:27

标签: java json rest csv

我有以下格式的JSON,我正在尝试写入CSV:

{
    "results": [{

            "geo_position": {
                "Field1": 11,
                "Filed2": 12
            },
            "Field3": 13,
            "Filed4": 14,
            "Field5": 15
        },

        {
            "geo_position": {
                "Field1": 21,
                "Filed2": 22
            },
            "Field3": 23,
            "Filed4": 24,
            "Filed5": 25
        }
    ]
}

我期待输出如:

field1,field2,field3,field4,field5
11,12,13,14,15
21,22,23,24,25

我的输出CSV如下:

    geo_position,field3,field4,field5
   {Field1:11,Field2:12}, 13,14,15
   {Field2:21,Field2:22},23,24,25

我的java代码:

JSONObject jsonObj = new JSONObject(jsonArray);
System.out.println(jsonObj);
JSONArray docs = jsonObj.getJSONArray("results");
File file=new File("C:/fromJSON2.csv");
String csv = CDL.toString(docs);
FileUtils.writeStringToFile(file, csv);

有人可以帮我弄清楚为什么我会采用不同的格式。我应该怎么做以达到我期望的格式?

3 个答案:

答案 0 :(得分:1)

您可以使用我的解决方案:

dictionary.AddOrUpdate(
  true,
  new List<string>() {"new proxy"},
  (b, list) => {
    list.Add("new proxy";
    return list;
});

答案 1 :(得分:0)

你的JSON结构是

{
"results":
[
    {
        "geo_position": {"Field1":11,"Filed2":12},
        "Field3":13,
        "Filed4":14,
        "Field5":15
    },

    {
        "geo_position":{"Field1":21,"Filed2":22},
        "Field3":23,
        "Filed4":24,
        "Filed5":25
    }

]
}

为了使它能够按照您希望的方式工作,它应该是这样的:

{
"results":
[
    {
        "Field1":11,
        "Filed2":12,
        "Field3":13,
        "Filed4":14,
        "Field5":15
    },

    {
        "Field1":21,
        "Filed2":22,
        "Field3":23,
        "Filed4":24,
        "Filed5":25
    }

]
}

你可以做些什么,比如

for(int i = 0; i<resultsJSONArray.length(); ++i){ 
    if(resultsJSONArray.get(i).has("geo_position")) {
          String names[] = JSONObject.getNames(resultsJSONArray.get(i).get("geo_position")));
          for(int i = 0; i<names().length; ++i) {                                       
              resultsJSONArray.get(i).put(names[i],resultsJSONArray.get(i).get("geo_position").get(names[i]));
          }
          JSONObject.getNames(resultsJSONArray.get(i).remove("geo_position"));
    }
}

答案 2 :(得分:0)

数据中存在一些拼写错误。

您可以尝试 json2flat 转换JSON文档以获得等效的CSV表示。
如果您想尝试更多JSON文档,请点击 here

对于JSON数据:

{
    "results": [{

            "geo_position": {
                "Field1": 11,
                "Field2": 12
            },
            "Field3": 13,
            "Field4": 14,
            "Field5": 15
        },

        {
            "geo_position": {
                "Field1": 21,
                "Field2": 22
            },
            "Field3": 23,
            "Field4": 24,
            "Field5": 25
        }
    ]
}

等效CSV表示:

results/Field3,results/Field4,results/Field5,results/geo_position/Field1,results/geo_position/Field2
13.0,14.0,15.0,11.0,12.0
23.0,24.0,25.0,21.0,22.0

代码也很简单。

JFlat flatMe = new JFlat(jsonString);
flatMe
    .json2Sheet()
    .headerSeparator("/")
    .write2csv("test.csv");

这会将结果写入test.csv文件。