【问题标题】:Csv to Json converter toolCSV 到 Json 转换器工具
【发布时间】:2015-08-19 03:27:54
【问题描述】:

我有一个要转换为 Avro 的 csv 文件;因为没有工具可以直接从 csv 转换为 avro,所以我决定使用在线工具将 csv 转换为 json,然后我打算编写一个小程序来将该 json 转换为 avro 模型。 我遇到的问题是 csv 文件看起来像这样

H1、H2、H3
------------------
A1、A2、A3、A4、A4
B1、B2、B3、B4
C1、C2、C3

H3 之后的每一列都是 H3 数组的一部分。 现有工具似乎没有包含此功能(这个说有,但我不确定如何使用它:http://www.convertcsv.com/csv-to-json.htm)。 有谁知道如何处理这个问题。

谢谢, 虾酱

【问题讨论】:

  • 您目前是否有任何现有代码可以处理该 csv 文件?如果是这样,它将从 csv 文件读取的输出存储在哪里?我在想,将输出转换为 JSON 可能更容易。
  • 我没有处理 csv 的代码,我有将 json 处理成 avro 的代码。我希望有一个在线工具为我将 csv 转换为 json。
  • 我是 convertcsv.com 的创建者,您可以在 CSV 到 JSON 页面上执行此操作 - 1. 将数据粘贴到文本区域。 2. 按 CSV 到 JSON 按钮。如果您需要帮助,请在网站上与我联系以获取详细信息。
  • 我不清楚这个问题...您能否提供您希望根据您提供的输入数据输出的 JSON?像这样的东西? { "H1":"A1","H2":"A2","H3":["A4","A4"] }

标签: json csv avro


【解决方案1】:

这可以在 Powershell 中完成。

Import-Csv "foo.csv" | ConvertTo-Json | Add-Content -Path "foo.json"

您也可以添加 -compress 开关来删除换行符

Import-Csv "foo.csv" | ConvertTo-Json -compress | Add-Content -Path "foo.json"

【讨论】:

    【解决方案2】:

    您正在寻找的是基于一些嵌套参数包装您的 JSON 结果。基本上是这样的:

    H1, H2, H3
    ------------------
    A1, A2, A3, A4, A4
    B1, B2, B3, B4
    C1, C2, C3 
    

    到这里:

    [
        {
            "H1": "A1",
            "H2": "A2",
            "H3": [
                "A3",
                "A4",
                "A4"
            ]
        },
        {
            "H1": "B1",
            "H2": "B2",
            "H3": [
                "B3",
                "B4"
            ]
        },
        {
            "H1": "C1",
            "H2": "C2",
            "H3": [
                "C3"
            ]
        }
    ]
    

    我在http://csvtojson.com创建了一个解决此类问题的工具

    您需要做的是调整您的标题,以便它明确说明您希望如何嵌套结果。 对于您的示例,它看起来像:

    H1, H2, H3.0, H3.1, H3.2
    A1, A2, A3, A4, A4
    B1, B2, B3, B4
    C1, C2, C3 
    

    注意H3 是如何使用点H3.0H3.1H3.2 重复的:这些点表示您希望如何将结果包装到H3 数组中。最后,按下“转换按钮”,您的结果将提示您。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      我不熟悉 Avro,但下面的 jq 过滤器将执行 Jona Rodrigues 描述的转换。具体来说:如果文件filter.jq包含

      [
        split("\n")                           # split string into lines
      | (.[0]    | split(",")) as $headers    # split header
      | (.[1:][] | split(","))                # split data rows
      | select(length>0)                      # get rid of empty lines
      | $headers[:-1] as $h1                  # fixed headers
      | .[:($h1|length)] as $p1               # fixed part
      | .[($h1|length):] as $p2               # variable part
      | (
           [   [ $h1, $p1 ]                   # \  
             | transpose[]                    #  \ assemble fixed object
             | {key:.[0], value:.[1]}         #  / from fixed keys and values
           ] | from_entries                   # /
        ) + {
           ($headers[-1]): $p2                # assemble variable object
        }
      ]
      

      data 包含

      H1,H2,H3
      A1,A2,A3,A4,A4
      B1,B2,B3,B4
      C1,C2,C3
      

      然后是命令

      jq -M -R -s -r -f filter.jq data    
      

      会产生

      [
        {
          "H1": "A1",
          "H2": "A2",
          "H3": [
            "A3",
            "A4",
            "A4"
          ]
        },
        {
          "H1": "B1",
          "H2": "B2",
          "H3": [
            "B3",
            "B4"
          ]
        },
        {
          "H1": "C1",
          "H2": "C2",
          "H3": [
            "C3"
          ]
        }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 1970-01-01
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多