为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 正确解析 JSON 数据时出错

使用 Go 正确解析 JSON 数据时出错

Go
Qyouu 2021-08-16 10:29:25
我是 Go 的新手,并尝试使用 github 中的库将 JSON 解析为 CSV。https://github.com/jehiah/json2csv但是我遇到了这个问题:https : //github.com/jehiah/json2csv/issues/22,作者没有回复。我意识到如果我们将以下 JSON 作为 json.input 提供给文件:{"user": {"name":["jehiah, mike, semo"], "password": "root"}, "remote_ip": "127.0.0.1", "dt" : "[20/Aug/2010:01:12:44 -0400]"}{"user": {"name":["jeroenjanssens", "jeroen2", "jero55"], "password": "123"}, "remote_ip": "192.168.0.1", "dt" : "[20/Aug/2010:01:12:44 -0400]"}{"user": {"name":"markdata", "password": ""}, "remote_ip": "76.216.210.0", "dt" : "[20/Aug/2010:01:12:45 -0400]"}现在,如果我尝试将其用作命令: go run main.go -k user.name -i input.json -o output.json它返回以下输出:"[jehiah, mike, semo]"[jeroenjanssens jeroen2 jero55]markdata但如 opend 发布中所述,我期待响应为:jehiah, mike, semojeroenjanssens, jeroen2, jero55markdata我猜这是由于以下行而发生的:https : //github.com/jehiah/json2csv/blob/master/main.go#L110无论如何在阅读该行时删除逗号。您能否就如何实现上述预期输出提出建议?
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

这里有几个问题在起作用:

  1. JSON 定义的结构并不是都可以用 CSV 表示的,例如:

    • 对象例如 {"name":"john"}

    • 数组例如 ["john", "mike", "sam"]

  2. 没有 CSV 标准。嗯,有 RFC-4180,但大多数 CSV 编码器/解码器不遵守它,因为 Microsoft。

  3. 您使用的包编码很差。

CSV 实现之间的主要区别之一是报价处理。考虑 JSON 字符串:"\"Hello, world!\"".

根据我们的编组器,我们最终可以得到字符串的以下任何 CSV 表示:

  • """Hello, world!"""

  • "\"Hello, world!\""

  • '"Hello, world!"'

一些编码器甚至会转义字符串内的逗号。您描述的包通过完全跳过逗号来规避这个问题。如果你问我,这是一个非常糟糕的设计决定。

你需要的一切都在 Go 的标准库中:

  1. encoding/json

  2. encoding/csv



查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信