使用自定义列名称和自定义值保存 JSON

Posted

技术标签:

【中文标题】使用自定义列名称和自定义值保存 JSON【英文标题】:Save JSON with Custom Column name and custom value 【发布时间】: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 在最后一行?我是这么认为的。 是的,它的错字我会编辑它!感谢您的帮助。 【参考方案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"

【讨论】:

以上是关于使用自定义列名称和自定义值保存 JSON的主要内容,如果未能解决你的问题,请参考以下文章

用户自定义属性id和自定义属性值不能一一匹配

OpenCSV:如何使用自定义列标题和自定义列位置从 POJO 创建 CSV 文件?

Spotfire 自定义格式和自定义表达式

如何对返回 orm 对象和自定义列的元组的查询进行正确排序、分组?

使用 Gradle 的“仅工件表示法”和自定义工件名称

System.Text.Json:如何为枚举值指定自定义名称?