使用JSON datat组织CSV文件

时间:2019-07-08 22:08:37

标签: java json csv

我正在尝试使用json数据填充CSV文件,但是我需要以某种特定方式来组织所有内容。我需要将json键作为标头,并将相关的值作为其下的数据,但是设置json的方式可以将名称填充到其中,但是需要将标记为“ items”的另一个块中的信息拆分为多个单元格的键为标题,并为填充表格的值。我不知道如何将json块的各个组件拆分为自己的单元格。

因此CSV应该设置为:

headers:       name            item1     item2    item3
data cells:    [first last]   [value1]  [value2] [value3]

JSON看起来像这样:

{
  "info":[
     {
       "name":{
        "first" : -----
        "last":-----
     },
   "item": [
    {
      "item1" : "value1"
      "item2" : "value2"
      "item3" : "value3"
    }
  ]
}

我已经使用了Apache commons FileUtils.writeStringToFile,但是在一个单元格中写入了所有“项”键和值,我需要1项到1单元格。名称很好,因为组件可以放在一个单元格中,我只需要拆分项目即可。

到目前为止,结果是Name是一个标头,并且该标头下的单元格具有名字和姓氏,第二个标头是Items,并列出该单元格中该json块中的所有键和值。 我希望item键是标题,并在其下分配值。

任何帮助或指导将不胜感激。

更新:为澄清起见,我正在从URL中提取JSON数据,因此其写入方式就是这样。我无法更改。

2 个答案:

答案 0 :(得分:0)

public static void main(String[] args) throws IOException {
        JSONObject  jo = (JSONObject) JSONObject.parse("{\"info\":[{\"name\":{\"first\" : \"-----\",\"last\":\"-----\"},\"item\": [{\"item1\" : \"value1\",\"item2\" : \"value2\",\"item3\" : \"value3\"}]}]}");
        String line1 = "headers:\tname\titem1\titem2\titem3\n";
        String line2 = "data cells:";
        JSONArray  info = jo.getJSONArray("info");
        JSONObject info1 = info.getJSONObject(0);
        JSONObject name = info1.getJSONObject("name");
        String nameKeys = name.keySet().toString();
        JSONArray item = info1.getJSONArray("item");
        JSONObject firstItem = item.getJSONObject(0);
        String item1Value = firstItem.getString("item1");
        String item2Value = firstItem.getString("item2");
        String item3Value = firstItem.getString("item3");
        line2 = line2 + "\t" +nameKeys + "\t"+ item1Value +"\t"+item2Value+"\t"+item3Value+"\n";
        BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\user\\Desktop\\test.csv"));
        bw.write(line1);
        bw.write(line2);
        bw.close();

    }

看起来像这样,获取值并将其写入csv文件。 您可以使用诸如(?<=item\d"\s:\s").*?(?=")之类的正则表达式来匹配“ value1”,“ value2”,“ value3”和正则表达式item\d的另一种方式,将“ item1”,“ item2”,“ item3”切成json字符串以获取值。

答案 1 :(得分:0)

login()

}