使用OPENJSON跳过对象来解析JSON SQL

问题描述

我正在尝试在Azure sql中使用OPENJSON解析json文件,但是我想在新表中进行特定的映射。 我有一个看起来像这样的json文件,其中包含许多y0_1,y0_2,.... y0_380。

    {"proto": "01","type": "A","description": "heartbeat","geometry": {"y0_1": {"tag": "Normal","probability": 0.40,"x": 39,"y": 13},"y0_2": {"tag": "category_3","probability": 0.8,"x": 48,"y0_3": {"tag": "Normal","probability": 0.9,"x": 27,"y": 10},"Test": {"proba": 0.65}}}

我想解析json并创建一个具有以下格式的表: 我尝试使用Openjson格式解析json,但是我不知道如何在同一列中获取所有y和x,如链接中的图片

SELECT * from OPENROWSET (
        BULK 'sample.json',DATA_SOURCE ='dataset',FORMATFILE_DATA_SOURCE = 'myblobstorage',SINGLE_CLOB
        ) AS J
        CROSS APPLY OPENJSON (BulkColumn)
        WITH (
            proto nvarchar(100) N'$.proto',description nvarchar(100) N'$.description',)

table output desired

解决方法

使用OPENJSONAS JSON数据类型和CROSS APPLY来深入到JSON的不同层。我创建了一个简化的示例来展示该技术:

DECLARE @json NVARCHAR(MAX) = '{
  "proto": "01","type": "A","description": "heartbeat","geometry": {
    "y0_1": {
      "tag": "Normal","probability": 0.40,"x": 39,"y": 13
    },"y0_2": {
      "tag": "category_3","probability": 0.8,"x": 48,"y0_3": {
      "tag": "Normal","probability": 0.9,"x": 27,"y": 10
    },"Test": {
      "proba": 0.65
    }
  }
}'


SELECT
    j.proto,j.[type],j.[description],JSON_VALUE ( g.[value],'$.tag' ) AS tag,'$.probability' ) AS probability,'$.x' ) AS x,'$.y' ) AS y

FROM OPENJSON( @json,'$' )
WITH (
    proto VARCHAR(50),[type] VARCHAR(50),[description] VARCHAR(50),[geometry] NVARCHAR(MAX) AS JSON
    ) j
    CROSS APPLY OPENJSON ( [geometry] ) g

我的结果:

My results

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...