【发布时间】:2020-03-22 06:23:39
【问题描述】:
我找到了很多解析 JSON 或 JSONB 的答案,但似乎 PostgreSQL 有自己的做事方式。
我有一个来自 PostgreSQL 的 CSV 转储文件,我想用 Ruby 进行解析。
转储的一列是用array_agg 创建的。它是一个字符串数组。不幸的是,PostgreSQL 决定不对某些值进行双引号。它可能认为它们是数字。
require 'json'
original_names = "[\"1800 Reposado 750ML\",1800Jalisco750ml,\"1800 Tequila Reposado, Jalisco, Mexico (750ml)\"]"
array = JSON.parse original_names
# Raises: 434: unexpected token at 'Jalisco750ml,"...' (JSON::ParserError)
我尝试自己添加引号,但由于其他字符串包含逗号而失败。
array = JSON.parse original_names.gsub(/,([^"|,]+),/, ',"\1",')
# Raises: 434: unexpected token at 'Jalisco", Mexico (750ml)"]' (JSON::ParserError)
我花了一个小时尝试解决方法,现在我相信我需要自己实现解析器。谁有更好的方法?
【问题讨论】:
-
像
1800Jalisco750ml这样的值必须用引号括起来 -
@SebastianPalma 没错,这是根本问题,有什么方法可以解析和容忍这些值吗?
-
您不想尝试编写 CSV 解析器。 CSV 是一种非常混乱的数据格式,会遇到各种问题。 Ruby 的 CSV 解析器非常健壮,但是,同样,因为 CSV 是一团糟,所以总有可能会出现问题。在我看来,使用 JSON 或 YAML 是更好的选择。至于让您的问题悬而未决,请不要将您的解决方案放在问题本身中。而是创建一个解释和记录修复的答案。 SO 将开始倒计时,并在其到期后允许您选择该答案作为正确答案。也从您的问题中删除“编辑:”。 (并且不要使用“编辑”标签。)
-
我删除了我的答案。您指出,“......但是,带有 , 的字符串似乎被分成了几个字符串,我需要避免这种情况。”我似乎错过了我的回答的效果。 :-)。
标签: json ruby postgresql