You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OPENJSON解析货币JSON时WITH子句失效,如何提取Code和Name?

解决OPENJSON WITH子句解析Code/Name字段的问题

1. 先明确JSON结构类型

OPENJSON的WITH子句失效,大概率是JSON结构和路径不匹配,先区分两种常见场景:

场景1:JSON是多元素数组(多数货币数据的格式)

如果你的JSON是数组结构,比如:

[
  {"code": "USD", "name": "United States Dollar"},
  {"code": "BTC", "name": "Bitcoin"},
  {"code": "EUR", "name": "Euro"}
]

需要让OPENJSON先遍历数组元素,再用WITH子句指定子对象的字段路径:

DECLARE @json NVARCHAR(MAX) = N'[
  {"code": "USD", "name": "United States Dollar"},
  {"code": "BTC", "name": "Bitcoin"},
  {"code": "EUR", "name": "Euro"}
]';

SELECT Code, Name
FROM OPENJSON(@json)
WITH (
  Code VARCHAR(50) '$.code',
  Name VARCHAR(100) '$.name'
);

这里OPENJSON(@json)负责解析数组的每个元素,WITH里的$.code是相对于每个子对象的路径,能正确提取字段。

场景2:JSON是单个对象

如果是单条货币数据的对象结构:

{"code": "USD", "name": "United States Dollar"}

直接用WITH子句绑定根路径即可,或者用更简洁的JSON_VALUE写法:

DECLARE @json NVARCHAR(MAX) = N'{"code": "USD", "name": "United States Dollar"}';

-- 方法1:OPENJSON + WITH
SELECT Code, Name
FROM OPENJSON(@json)
WITH (
  Code VARCHAR(50) '$.code',
  Name VARCHAR(100) '$.name'
);

-- 方法2:直接用JSON_VALUE(单对象更高效)
SELECT 
  JSON_VALUE(@json, '$.code') AS Code,
  JSON_VALUE(@json, '$.name') AS Name;

2. 常见错误排查

  • 大小写不匹配:OPENJSON默认区分大小写,比如JSON里字段是Code,你写$.code就会取不到值,要严格对应。
  • JSON格式无效:先用ISJSON(@json)验证合法性,返回1表示有效,0表示JSON有语法错误:
    SELECT ISJSON(@json) AS IsValidJson;
    
  • 版本不支持:确保你的SQL Server版本是2016及以上,或使用Azure SQL Database(OPENJSON是2016才引入的功能)。

3. 嵌套JSON的处理

如果JSON有外层包装(比如嵌套在data节点下):

{"data": [
  {"code": "USD", "name": "United States Dollar"},
  {"code": "BTC", "name": "Bitcoin"}
]}

需要调整OPENJSON的路径到数组所在位置:

DECLARE @json NVARCHAR(MAX) = N'{"data": [
  {"code": "USD", "name": "United States Dollar"},
  {"code": "BTC", "name": "Bitcoin"}
]}';

SELECT Code, Name
FROM OPENJSON(@json, '$.data')
WITH (
  Code VARCHAR(50) '$.code',
  Name VARCHAR(100) '$.name'
);

内容的提问来源于stack exchange,提问作者Russ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:52:44