流分析解析 json,相同的 key 可以是数组,也可以不是

Posted

技术标签:

【中文标题】流分析解析 json,相同的 key 可以是数组,也可以不是【英文标题】:Stream analytics parse json, same key can be array or not 【发布时间】:2020-11-08 21:42:50 【问题描述】:

将 XML 转换为 JSON 并发送到 EventHub,然后流分析对其进行处理。 问题是当 XML 使用相同的标签名称时,它会在 JSON 端转换为列表,但是当只有一个标签时不会转换为列表。所以同一个标签可以是数组,也可以不是数组。

例如: 我可以收到:


  "k1": 123,
  "k2": 
    "l1": 2,
    "l2": 12
  

或:


  "k1": 123,
  "k2": [
    
      "l1": 2,
      "l2": 12
    ,
    
      "l1": 3,
      "l2": 34
    
  ]

我可以很容易地独立处理第一个场景和第二个场景,但是我不知道如何同时处理这两个场景,这可能吗?

【问题讨论】:

【参考方案1】:

是的,是的。如果您知道如何分别处理每种情况,那么在您单独处理它们之前,我只会建议您如何区分这两种情况。

本质上,这个想法是检查该字段是否是一个数组。我所做的是,我在javascript中编写了一个UDF函数,如果传递的对象是一个数组,则返回“true”/“false”:

function UDFSample(arg1) 
    'use strict';
    var isArray = Array.isArray(arg1);
    return isArray.toString();

您可以在组查询中使用它:

with test as (SELECT Document from input where UDF.IsArray(k2) = 'true')

现在“测试”包含您可以将其视为数组的项目。对于 k2 只是一个对象的情况,您也可以这样做。

【讨论】:

以上是关于流分析解析 json,相同的 key 可以是数组,也可以不是的主要内容,如果未能解决你的问题,请参考以下文章

流分析可以过滤数组属性的项目吗?

Azure 流分析如何展平 json 数组

ajax怎样解析json数组并用逡驿秩

Java如何获取Json相同key对应的value?

使用 EasyMapping (Swift) 解析 Json 数组

python解析JSON数据结构