json - 解析 JSON 列值
问题描述
我正在尝试从名为 Json_table 的表中解析一个 json 列,该表具有 2 种不同类型的元素,
keyfield | json_column | SomeotherField1 | SomeotherField2
----------------------------------------------------------------
keyfield1, | {"jField1":"Value1", ..."jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}] | someothervalue | someothervalue
使用 get_json_object 函数,我可以轻松访问 jField1 到 jField10 和 MapField。但我不知道如何将 MapField 解析为更多单独的列。
SELECT keyfield, get_json_object(json_column, '$.jField1') as jField1, get_json_object(json_column, '$.jField2') as jField2
FROM Json_table
我需要编写可以为我提供这样的结果的查询
Select Keyfield, jField1, jField2, .. , jField10, Key1, Key2 From Json_table
result as:
keyfield1 | Value1 | ... | Value10 | Keyvalue1 | Keyvalue2
我想从“Mapfield”部分中获取所有单个元素。
解决方案
您可以MapField
通过索引访问数组,$.MapField[0].Value,
$.MapField[1].Value
with cte as (
select string('{"jField1":"Value1","jField10":"Value10", "MapField":[{"Key": "key1", "Value":"Keyvalue1"}, {"Key": "key2", "Value":"Keyvalue2"}]}')as jsn_col)
select get_json_object(jsn_col,'$.jField1')jField1,
get_json_object(jsn_col,'$.MapField[0].Value')key1,
get_json_object(jsn_col,'$.MapField[1].Value')key2 from cte;
+-------+---------+---------+
|jField1|key1 |key2 |
+-------+---------+---------+
|Value1 |Keyvalue1|Keyvalue2|
+-------+---------+---------+
推荐阅读
- html - 在输入类型范围的步骤和拇指上放置图标
- python - Python 性能:平方根和热循环操作策略
- excel - 根据标题复制Excel中的列
- java - IntelliJ Maven JAR“没有主要清单属性错误”
- azure - 将多个 .NET Core 项目的测试覆盖率从 Azure DevOps 发布到 SonarQube 服务器
- flask - flask-sqlalchemy:数据库断开问题
- android - 服务将在哪个线程中运行?
- html - 当一行中的文本较少时无法对齐文本行
- javascript - 当鼠标进入窗口的顶部时做一些事情
- rust - 使用 trim_end_matches 作为闭包函数的类型不匹配:预期签名...找到“for<'r> ...”的签名