【发布时间】:2021-05-14 07:39:40
【问题描述】:
我在使用 SQL Server 将 JSON 格式的数据加载到表中时遇到问题。
我在 CSV 文件中有以下行:
A: 15957
B: test_category_labeling_highlight_fordham_bbbbb
C: 116
D: 3864
E: 1
F: Policy Change
G: {"Change Type": {"selectedText": "Privacy Policy Last modified: June 30, 2015 (view archived versions)", "startIndexInSegment": 0, "endIndexInSegment": 79, "value": "Unspecified"} , "User Choice": {"selectedText": "Privacy Policy Last modified: June 30, 2015 (view archived versions)", "startIndexInSegment": 0, "endIndexInSegment": 79, "value": "Unspecified"}, " Notification Type ": {" selectedText ":" Privacy Policy Last modified: June 30, 2015 (view archived versions) "," startIndexInSegment ": 0," endIndexInSegment ": 79," value ":" General notice in privacy policy "} }
H: 6/30/15
I: https://www. google.com/intl/en/policies/privacy/
我对 G、H、I 列感兴趣。
要加载数据使用
CREATE TABLE #tempTable1
(
a VARCHAR(max),
b VARCHAR(max),
c VARCHAR(max),
d VARCHAR(max),
e VARCHAR(max),
f VARCHAR(max),
g VARCHAR(max),
h VARCHAR(max),
i VARCHAR(max),
);
BULK INSERT #tempTable1
FROM 'C:\Users\file.csv'
WITH (FORMAT = 'CSV', ROWTERMINATOR = '\n', FIRSTROW = 2);
ALTER TABLE #tempTable1
DROP COLUMN a, b, c, d, e, f, h, i;
到目前为止它对我有好处,我得到一列,每行都有 JSON 值的单元格{...}。
现在,我必须以某种方式重新转换生成的表。 h和i列的值是一样的,只是JSON变化了。在我尝试过的临时变量中声明所述 JSON
DECLARE @json varchar (max);
SELECT g INTO @json FROM #tempTable1;
但没有成功以后用
访问它的键值INSERT INTO Data (G_1, G_2, E, F)
SELECT *
FROM OPENJSON (@JSON)
WITH (
G_1 VARCHAR(50) '$."Personal Information Type".value',
G_2 VARCHAR(100) '$."Purpose".value'
);
【问题讨论】:
-
也许您的 JSON 示例数据不完整 - 它不包括
Purpose或Personal Information Type的键。 -
openjson()中使用的 JSON 路径格式也不正确。假设这些密钥存在,它们需要是'$."Personal Information Type".value'和'$.Purpose.value'。 -
@AlwaysLearning 我还没有到达那个区域,因为错误确实让我在 DECLARE
json VARCHAR(max);从#tempTable1中选择g进入 操作时json;当用该列的行填充 json 以便稍后使用
标签: sql json sql-server csv