使用正确的引号从Bigquery导出表中的JSON值

问题描述 投票:1回答:1

我想在Bigquery中导出列的值,如下所示:

| NAME    | JSON          |
| abc     | {"test": 1}   |

但是,当我想通过python代码将其导出到gzip压缩的csv / tsv到带有字段分隔符='\ t'(https://google-cloud.readthedocs.io/en/latest/bigquery/generated/google.cloud.bigquery.client.Client.extract_table.html)的google云存储时,我总是得到类似的东西:

| NAME    | JSON            | 
| abc     | "{""test"": 1}" |

我知道逃避,我一直在尝试逃避(使用“”来逃避“或添加 - 值),但我似乎无法将导出视为:

{"test": 1}

请帮我?

json csv google-bigquery double-quotes
1个回答
2
投票

工具输出是正确的,但您需要阅读RFC 4180(CSV文件的标准),以了解原因。

基本上,JSON spectest需要双引号,即"test"

CSV中允许使用整个字段的双引号。但CSV规范还说,在带引号字段的CSV中,内部引用是重复的。这是RFC 4180第2部分的规则7:

  1. 如果使用双引号括起字段,则必须通过在其前面添加另一个双引号来转义出现在字段内的双引号。例如: “AAA级”, “B”, “BB”, “CCC”

那么解决方案是什么?

可能,您需要符合RFC 4180的CSV读取器,因此您不会在使用文件的位置自行编写解析代码。

你可以用双引号替换加倍的双引号,并且大括号中的引号不是这样的:

sed -e 's/"{/{/g; s/}"/}/g; s/""/"/g;' in.csv > out.csv

转型

"{""test"": 1}"

{ "test": 1}

或者在JavaScript中使用String.replace,但生成的csv文件不符合RFC 4180。

© www.soinside.com 2019 - 2024. All rights reserved.