我正在尝试使用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数据,因此其写入方式就是这样。我无法更改。
答案 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()
}