【问题标题】:Azure LogAnalytics Parse JSON ArrayAzure LogAnalytics 解析 JSON 数组
【发布时间】:2019-06-25 21:31:07
【问题描述】:

我正在将一些自定义日志提取到 Azure LogAnalytics。其中一列包含嵌套的 json 对象。我想将每个嵌套对象返回到单独的列值。

正在尝试 mvexpand 语句,但没有任何运气。

customLog_CL
| extend test = parsejson(target_s)
| mvexpand test

列数据如下所示。

[ { "id": "00phb49dl40lBsasC0h7", "type": "PolicyEntity", "alternateId": "unknown", "displayName": "Default Policy", "detailEntry": "@{policyType=hello}" }, { "id": "0pri9mxp9vSc4lpiU0h7", "type": "PolicyRule", "alternateId": "00phb49dl40lBsasC0h7", "displayName": "All Users Login", "detailEntry": null } ]

【问题讨论】:

    标签: azure-log-analytics


    【解决方案1】:

    我的情况完全相同,所以希望我们可以分享知识。 我最终做了这样的事情,如果这是正确的做法,或者我有任何错误,老实说我现在不能告诉你(我还在做数据验证,所以我稍后会更新),但是这个至少应该让你开始。

    customLog_CL
    | mvexpand parsejson(target_s)
    | extend Id=target_s["id"]
    | extend type=target_s["type"]
    | extend OtherId=target_s["alternateId"]
    | project Id, type, OtherId
    

    【讨论】:

      【解决方案2】:

      这应该有效:

      datatable(d:dynamic)  
      [  
          dynamic(  
              [  
                  { "id": "00phb49dl40lBsasC0h7", "type": "PolicyEntity", "alternateId": "unknown", "displayName": "Default Policy", "detailEntry": "@{policyType=hello}" },   
                  { "id": "0pri9mxp9vSc4lpiU0h7", "type": "PolicyRule", "alternateId": "00phb49dl40lBsasC0h7", "displayName": "All Users Login", "detailEntry": "" }  
              ]  
          )  
      ]  
      | mv-expand(d)  
      | project key = tostring(d['id']), value = d
      | extend p = pack(key, value)
      | summarize bag = make_bag(p)
      | evaluate bag_unpack(bag)
      

      Output

      【讨论】:

        【解决方案3】:

        请检查这是否符合您的要求。

            let hosts_object = parsejson('{"hosts": [ { "id": "00phb49dl40lBsasC0h7", "type": "PolicyEntity", "alternateId": "unknown", "displayName": "Default Policy", "detailEntry": "@{policyType=hello}" }, { "id": "0pri9mxp9vSc4lpiU0h7", "type": "PolicyRule", "alternateId": "00phb49dl40lBsasC0h7", "displayName": "All Users Login", "detailEntry": null } ]}');
            print hosts_object 
            | extend json1 = hosts_object.hosts[0] , json2 = hosts_object.hosts[1]
        

        输出应该如下所示

        Additional Documentation Reference

        希望这会有所帮助。

        【讨论】:

        • 可行,但结果可以包含 1 个或多个对象。所以可能有 hosts_object.hosts[3] ... 到 hosts_object.hosts[x]
        • 也许这里更好的问题是如何提取具有多个嵌套 json 对象的 json 字符串中的每个属性。其中嵌套的成员可能是无限的,
        • 抱歉耽搁了肖恩,感谢您提供更多信息。让我进一步检查一下,如果我有任何发现,请分享。谢谢
        猜你喜欢
        • 2021-11-21
        • 2010-10-25
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        相关资源
        最近更新 更多