无法将JSON转换为CSV
我正在尝试从Web API解析Json内容并使用以下代码转换为csv但不起作用。我得到的错误是
"  不能 添加  A 嵌套 关系 或 一个 元件 柱 至  A 表 含有  A  simpleContent的 柱" 强>
I am trying to parse the Json content from web API and convert to csv using the following code but isnt working. the error that i get is " Cannot add a nested relation or an element column to a table containing a SimpleContent column."
提前感谢您的帮助!!!
使用System;
使用System.IO;
使用System.Net;
使用System.Text;
使用System.Collections.Generic;
使用System。数据;
使用System.Linq;
使用System.Data.DataSetExtensions;
使用System.Web;
使用Newtonsoft.Json;
使用CsvHelper;
使用System.Net.Http;
使用System.Runtime;
使用System.Xml;
$
命名空间SerraviewAPI
{
 公共课Webrequest
  {
     静态字符串内容;
      public static void Main()
      {
Webrequest.content =" {\" id \": \" Table_4155\",\" headers\":[\" OrgUnitName\",\" CostCentre\",\" Level\" ,\" OrgUnitLevel0\",\" CostCentreOnLevel0\",\" OrgUnitLevel1\",\" CostCentreOnLevel1\",\" OrgUnitLevel2\" ,\" CostCentreOnLevel2\",\" OrgUnitLevel3\",\" CostCentreOnLevel3\",\" OrgUnitLevel4\",\" CostCentreOnLevel4\" ,\" OrgUnitLevel5\",\" CostCentreOnLevel5\",\" OrgUnitLevel6\",\" CostCentreOnLevel6\"],\" rows\" ;:[[\"计费Europe\",\" 5583\",\" 6\",\" LinkedIn \\",\" D000\",\" GWS / FIN\",\" D050\",\" CorporateManagement\",\" D1P0\",\"金融与Accounting\",\" D2P2\",\" CAOOrganization\",\" D3P1\",\ " ControllershipOrg\",\" D4P1\",\"计费Europe\",\" 5583\"],[\" AdvertisingOperations\" ;,\" 1900\",\" 6\",\" LinkedIn\",\" D000\",\" GSO\" ;,\" D020\",\" Advertising\",\" D1C0\",\" AdvertisingOperations\",\" D2C1\" ;,\" AdvertisingOperations\",\" D3C1\",\" AdvertisingOperations\",\" D4C1\",\" AdvertisingOpe rations\",\" 1900 \"]]
}";    
jsonStringToCSV(内容);
    }
$
    public static void jsonStringToCSV(string jsonContent)
    {
        //使用NewtonSoft json nuget包
        XmlNode xml = JsonConvert.DeserializeXmlNode(" {records:{record:" + Webrequest.content +"}}");
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.LoadXml(xml.InnerXml);
        XmlReader xmlReader = new XmlNodeReader(xml);
        DataSet dataSet = new DataSet();
        dataSet.ReadXml(xmlReader);
        var dataTable = dataSet.Tables [1];
        // Datatable to CSV
&NBSP; &NBSP; &NBSP; &NBSP; var lines = new List< string>();
&NBSP; &NBSP; &NBSP; &NBSP; string [] columnNames = dataTable.Columns.Cast< DataColumn>()。
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; 选择(column => column.ColumnName)。
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; ToArray();
&NBSP; &NBSP; &NBSP; &NBSP; var header = string.Join(",",columnNames);
&NBSP; &NBSP; &NBSP; &NBSP; lines.Add(header);
&NBSP; &NBSP; &NBSP; &NBSP; var valueLines = dataTable.AsEnumerable()
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; .Select(row => string.Join(",",row.ItemArray));
&NBSP; &NBSP; &NBSP; &NBSP; lines.AddRange(valueLines);
&NBSP; &NBSP; &NBSP; &NBSP; File.WriteAllLines(@" C:\ Users \ Feed \\\.csv",lines);
&NBSP; &NBSP; }
}
}
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Data.DataSetExtensions;
using System.Web;
using Newtonsoft.Json;
using CsvHelper;
using System.Net.Http;
using System.Runtime;
using System.Xml;
namespace SerraviewAPI
{
public class Webrequest
{
static string content;
public static void Main()
{
Webrequest.content ="{\"id\":\"Table_4155\",\"headers\":[\"OrgUnitName\",\"CostCentre\",\"Level\",\"OrgUnitLevel0\",\"CostCentreOnLevel0\",\"OrgUnitLevel1\",\"CostCentreOnLevel1\",\"OrgUnitLevel2\",\"CostCentreOnLevel2\",\"OrgUnitLevel3\",\"CostCentreOnLevel3\",\"OrgUnitLevel4\",\"CostCentreOnLevel4\",\"OrgUnitLevel5\",\"CostCentreOnLevel5\",\"OrgUnitLevel6\",\"CostCentreOnLevel6\"],\"rows\":[[\"Accounting-Europe\",\"5583\",\"6\",\"LinkedIn\",\"D000\",\"GWS/FIN\",\"D050\",\"CorporateManagement\",\"D1P0\",\"Finance&Accounting\",\"D2P2\",\"CAOOrganization\",\"D3P1\",\"ControllershipOrg\",\"D4P1\",\"Accounting-Europe\",\"5583\"],[\"AdvertisingOperations\",\"1900\",\"6\",\"LinkedIn\",\"D000\",\"GSO\",\"D020\",\"Advertising\",\"D1C0\",\"AdvertisingOperations\",\"D2C1\",\"AdvertisingOperations\",\"D3C1\",\"AdvertisingOperations\",\"D4C1\",\"AdvertisingOperations\",\"1900\"]]
}";
jsonStringToCSV(content);
}
public static void jsonStringToCSV(string jsonContent)
{
//used NewtonSoft json nuget package
XmlNode xml = JsonConvert.DeserializeXmlNode("{records:{record:" + Webrequest.content + "}}");
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml.InnerXml);
XmlReader xmlReader = new XmlNodeReader(xml);
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlReader);
var dataTable = dataSet.Tables[1];
//Datatable to CSV
var lines = new List<string>();
string[] columnNames = dataTable.Columns.Cast<DataColumn>().
Select(column => column.ColumnName).
ToArray();
var header = string.Join(",", columnNames);
lines.Add(header);
var valueLines = dataTable.AsEnumerable()
.Select(row => string.Join(",", row.ItemArray));
lines.AddRange(valueLines);
File.WriteAllLines(@"C:\Users\Feed\1.csv", lines);
}
}
}
您好,
首先,这里没有回答只是确认DataSet无法处理您的数据关系。
First off, no answer here just confirmation that a DataSet can not handle your data relationships.
您不能使用DataSet,它不知道如何处理您的关系。你在这里很好
You can't use a DataSet, it does not know how to handle your relationships. You are good here
var contents = "{records:{record:" + "{\"id\":\"Table_4155\",\"headers\":[\"OrgUnitName\",\"CostCentre\",\"Level\",\"OrgUnitLevel0\",\"CostCentreOnLevel0\",\"OrgUnitLevel1\",\"CostCentreOnLevel1\",\"OrgUnitLevel2\",\"CostCentreOnLevel2\",\"OrgUnitLevel3\",\"CostCentreOnLevel3\",\"OrgUnitLevel4\",\"CostCentreOnLevel4\",\"OrgUnitLevel5\",\"CostCentreOnLevel5\",\"OrgUnitLevel6\",\"CostCentreOnLevel6\"],\"rows\":[[\"Accounting-Europe\",\"5583\",\"6\",\"LinkedIn\",\"D000\",\"GWS/FIN\",\"D050\",\"CorporateManagement\",\"D1P0\",\"Finance&Accounting\",\"D2P2\",\"CAOOrganization\",\"D3P1\",\"ControllershipOrg\",\"D4P1\",\"Accounting-Europe\",\"5583\"],[\"AdvertisingOperations\",\"1900\",\"6\",\"LinkedIn\",\"D000\",\"GSO\",\"D020\",\"Advertising\",\"D1C0\",\"AdvertisingOperations\",\"D2C1\",\"AdvertisingOperations\",\"D3C1\",\"AdvertisingOperations\",\"D4C1\",\"AdvertisingOperations\",\"1900\"]] }" + "}}";
XmlNode xml = JsonConvert.DeserializeXmlNode(contents);
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml.InnerXml);
var xmlReader = new XmlNodeReader(xmldoc);
所以我猜测dataSet.ReadXml就是问题。 所以你需要找出一个没有使用DataSet的方法。
So I'm guessing the dataSet.ReadXml is the issue. So you will need to figure out a method w/o using a DataSet.