【问题标题】:Save JSON with Custom Column name and custom value使用自定义列名称和自定义值保存 JSON
【发布时间】:2021-12-09 02:37:04
【问题描述】:

我有这个代码

foreach (var table in doc.DocumentNode.SelectNodes("//table[@id='formTbl']"))
{
    foreach (var row in table.SelectNodes("tbody/tr"))
    {
        foreach (var cell in row.SelectNodes("td"))
        {
            if (X == 1)
            { 
                Console.WriteLine($"Value: {cell.InnerText}");
                X = 2;
                string Value = cell.InnerText;
            }
            else if(X==2)
            {
                Console.WriteLine($"Column: {cell.InnerText}");
                X = 1;
                string Column = cell.InnerText;
            }                     
        }
    }
}                     

我想获得像
{Column:Value, Column:Value, Column:Value}

这样的 Json

我正在使用 Newtonsoft.Json 和 HtmlAgilityPack。有没有办法得到那个Json?到目前为止,我认为我可以创建
{ {X = Column, Y= Value}, {X = Column, Y= Value} },但这不是我想要的。

E:表格看起来像

<table>
    <tr>
        <td>Column1</td>
        <td>Value1</td>
    </tr>
    <tr>
        <td>Column2</td>
        <td>Value2</td>
    </tr>
    <tr>
        <td>Column3</td>
        <td>Value3</td>
    </tr>
    <tr>
        <td>Column4</td>
        <td>Value4</td>
    </tr>
</table>

【问题讨论】:

  • 您显示的是数组或列表,不是吗?你能给出一个更真实的样本吗?如果你有一个像 "ColumnX, ColumnY, ..." 这样的表,那么它的 JSON 看起来像: [{"ColumnX":"SomeValue", "ColumnY": "SomeValue"}, {"ColumnX":"SomeValue ", "ColumnY": "SomeValue"} ...]
  • 我有这样的表 pastebin.com/xGb17QcA 我希望 json 看起来像 {"Column1":"Value1"},{"Column2":"Value2"},{"Column3":"Value3"当 foreach 结束时,我想将其保存为 X.json(或 x.txt 等)
  • 问题已编辑,以便所有人都能看到。
  • 谢谢,现在我也可以看到了。我认为其中有一个错字,Column3 应该是 Column4 在最后一行?我是这么认为的。
  • 是的,它的错字我会编辑它!感谢您的帮助。

标签: c# html json json.net


【解决方案1】:

如果您的“列”名称是唯一的,您可以简单地使用字典并将其序列化。即:

void Main()
{
    var html = 
@"<table id='formTbl'>
<tbody>
    <tr>
        <td>Column1</td>
        <td>Value1</td>
    </tr>
    <tr>
        <td>Column2</td>
        <td>Value2</td>
    </tr>
    <tr>
        <td>Column3</td>
        <td>Value3</td>
    </tr>
    <tr>
        <td>Column4</td>
        <td>Value4</td>
    </tr>
    </tbody>
</table>";
    var doc = new HtmlDocument();
    doc.LoadHtml(html);
    
    Dictionary<string, object> myDict = new Dictionary<string, object>();

    foreach (var table in doc.DocumentNode.SelectNodes("//table[@id='formTbl']"))
    {
        foreach (var row in table.SelectNodes("tbody/tr"))
        {
            var cells = row.SelectNodes("td");
            myDict.Add(cells[0].InnerText, cells[1].InnerText);
        }
    }
    var json = JsonConvert.SerializeObject(myDict, Newtonsoft.Json.Formatting.Indented);
    Console.WriteLine(json);
}

编辑:这输出:

{
  "Column1": "Value1",
  "Column2": "Value2",
  "Column3": "Value3",
  "Column4": "Value4"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2021-11-14
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多