使用TSQL解析JSON字符串

问题描述 投票:0回答:1

我对如何使用TSQL解析JSON字符串感到有些困惑。我已经看了几个小时的Youtube电影,但不幸的是我还没有找到解决方法。

这是JSONstring:

{"event":"2018","owner_id":"393235","members":{"623118":{"local_score":4,"stars":1,"global_score":0,"name":"thomas rigterink","id":"623118","last_star_ts":"1573807967","completion_day_level":{"1":{"1":{"get_star_ts":"1573807967"}}}},"627679":{"name":"Dickkieee","last_star_ts":0,"completion_day_level":{},"id":"627679","global_score":0,"stars":0,"local_score":0},"623352":{"id":"623352","last_star_ts":0,"completion_day_level":{},"name":"Gerjon Lenten","local_score":0,"stars":0,"global_score":0},"622595":{"local_score":0,"global_score":0,"stars":0,"id":"622595","last_star_ts":0,"completion_day_level":{},"name":"dylan"},"622884":{"local_score":65,"stars":13,"global_score":0,"id":"622884","last_star_ts":"1574197009","completion_day_level":{"1":{"2":{"get_star_ts":"1573765256"},"1":{"get_star_ts":"1573760616"}},"4":{"2":{"get_star_ts":"1573993940"},"1":{"get_star_ts":"1573987479"}},"6":{"1":{"get_star_ts":"1574107994"},"2":{"get_star_ts":"1574147096"}},"3":{"1":{"get_star_ts":"1573826027"},"2":{"get_star_ts":"1573827152"}},"5":{"2":{"get_star_ts":"1574021152"},"1":{"get_star_ts":"1573995867"}},"7":{"1":{"get_star_ts":"1574197009"}},"2":{"2":{"get_star_ts":"1573773372"},"1":{"get_star_ts":"1573768190"}}},"name":"Jeroen IJedema"},"393235":{"local_score":336,"stars":50,"global_score":0,"id":"393235","last_star_ts":"1546638507","completion_day_level":{"12":{"2":{"get_star_ts":"1544611601"},"1":{"get_star_ts":"1544607461"}},"2":{"2":{"get_star_ts":"1543839487"},"1":{"get_star_ts":"1543838455"}},"20":{"2":{"get_star_ts":"1545940671"},"1":{"get_star_ts":"1545940531"}},"15":{"1":{"get_star_ts":"1545255445"},"2":{"get_star_ts":"1545306775"}},"19":{"1":{"get_star_ts":"1545741466"},"2":{"get_star_ts":"1545915725"}},"18":{"2":{"get_star_ts":"1545605808"},"1":{"get_star_ts":"1545603795"}},"9":{"2":{"get_star_ts":"1544443203"},"1":{"get_star_ts":"1544362827"}},"6":{"2":{"get_star_ts":"1544090831"},"1":{"get_star_ts":"1544090372"}},"13":{"1":{"get_star_ts":"1544781604"},"2":{"get_star_ts":"1544959450"}},"5":{"1":{"get_star_ts":"1544007960"},"2":{"get_star_ts":"1544012691"}},"4":{"2":{"get_star_ts":"1543915857"},"1":{"get_star_ts":"1543915751"}},"3":{"2":{"get_star_ts":"1543844810"},"1":{"get_star_ts":"1543844649"}},"1":{"2":{"get_star_ts":"1543828757"},"1":{"get_star_ts":"1543654211"}},"23":{"2":{"get_star_ts":"1546638474"},"1":{"get_star_ts":"1546262133"}},"17":{"2":{"get_star_ts":"1546159136"},"1":{"get_star_ts":"1546159088"}},"25":{"2":{"get_star_ts":"1546638507"},"1":{"get_star_ts":"1546441207"}},"7":{"1":{"get_star_ts":"1544177334"},"2":{"get_star_ts":"1544179024"}},"10":{"2":{"get_star_ts":"1544438249"},"1":{"get_star_ts":"1544438218"}},"8":{"2":{"get_star_ts":"1544273070"},"1":{"get_star_ts":"1544270337"}},"16":{"1":{"get_star_ts":"1545233633"},"2":{"get_star_ts":"1545338402"}},"14":{"2":{"get_star_ts":"1545028942"},"1":{"get_star_ts":"1544986949"}},"11":{"2":{"get_star_ts":"1544520723"},"1":{"get_star_ts":"1544517871"}},"22":{"1":{"get_star_ts":"1546213058"},"2":{"get_star_ts":"1546590986"}},"24":{"2":{"get_star_ts":"1546439078"},"1":{"get_star_ts":"1546433420"}},"21":{"1":{"get_star_ts":"1545947800"},"2":{"get_star_ts":"1546209802"}}},"name":"WilfredMeyboom"},"622705":{"stars":1,"global_score":0,"local_score":6,"last_star_ts":"1573741255","completion_day_level":{"1":{"1":{"get_star_ts":"1573741255"}}},"id":"622705","name":"William Rooks"}}}

感谢您的帮助

json tsql parsing open-json
1个回答
0
投票

您的问题未提供足够的信息。但是您是新用户,我想在此方面为您提供帮助。

因此需要一些重要的提示

  • 始终说明实际工具(供应商和版本!)。您用[tsql]标记了此名称,该名称指向SQL Server,但未授予此权限。为了支持JSON,您将需要SQL-Server v2016 +。
  • 尝试创建独立,自运行示例。我们可以复制某些内容并将其粘贴到计算机上,然后单击“运行”。
  • 始终提供预期的输出。
  • 并且请将您的样本减少到所需的最低数量。两个get_start_ts节点足以理解1:n关系。
  • 而且我希望您更改了人们的名字...没人希望在互联网上的某个地方找到名字...

以及有关JSON的一些提示:

  • 使用键存储数据是非常糟糕的样式。如果可以更改JSON的创建,则应将"1": {"get_star_ts": "1545947800"},更改为"aBetterName": {"id":"1","get_star_ts": "1545947800"},

对于相当[[全部]的方法],您可以尝试以下方法:DECLARE @json NVARCHAR(MAX)= N'{"event":"2018","owner_id":"393235","members":{"623118":{"local_score":4,"stars":1,"global_score":0,"name":"name hfkjfdshfsg","id":"623118","last_star_ts":"1573807967","completion_day_level":{"1":{"1":{"get_star_ts":"1573807967"}}}},"627679":{"name":"name hskjkdsafkdf","last_star_ts":0,"completion_day_level":{},"id":"627679","global_score":0,"stars":0,"local_score":0},"623352":{"id":"623352","last_star_ts":0,"completion_day_level":{},"name":"name utoireut","local_score":0,"stars":0,"global_score":0},"622595":{"local_score":0,"global_score":0,"stars":0,"id":"622595","last_star_ts":0,"completion_day_level":{},"name":"dylan"},"622884":{"local_score":65,"stars":13,"global_score":0,"id":"622884","last_star_ts":"1574197009","completion_day_level":{"1":{"2":{"get_star_ts":"1573765256"},"1":{"get_star_ts":"1573760616"}},"4":{"2":{"get_star_ts":"1573993940"},"1":{"get_star_ts":"1573987479"}},"6":{"1":{"get_star_ts":"1574107994"},"2":{"get_star_ts":"1574147096"}},"3":{"1":{"get_star_ts":"1573826027"},"2":{"get_star_ts":"1573827152"}},"5":{"2":{"get_star_ts":"1574021152"},"1":{"get_star_ts":"1573995867"}},"7":{"1":{"get_star_ts":"1574197009"}},"2":{"2":{"get_star_ts":"1573773372"},"1":{"get_star_ts":"1573768190"}}},"name":"name nbnnbvcb"},"393235":{"local_score":336,"stars":50,"global_score":0,"id":"393235","last_star_ts":"1546638507","completion_day_level":{"12":{"2":{"get_star_ts":"1544611601"},"1":{"get_star_ts":"1544607461"}},"2":{"2":{"get_star_ts":"1543839487"},"1":{"get_star_ts":"1543838455"}},"20":{"2":{"get_star_ts":"1545940671"},"1":{"get_star_ts":"1545940531"}},"15":{"1":{"get_star_ts":"1545255445"},"2":{"get_star_ts":"1545306775"}},"19":{"1":{"get_star_ts":"1545741466"},"2":{"get_star_ts":"1545915725"}},"18":{"2":{"get_star_ts":"1545605808"},"1":{"get_star_ts":"1545603795"}},"9":{"2":{"get_star_ts":"1544443203"},"1":{"get_star_ts":"1544362827"}},"6":{"2":{"get_star_ts":"1544090831"},"1":{"get_star_ts":"1544090372"}},"13":{"1":{"get_star_ts":"1544781604"},"2":{"get_star_ts":"1544959450"}},"5":{"1":{"get_star_ts":"1544007960"},"2":{"get_star_ts":"1544012691"}},"4":{"2":{"get_star_ts":"1543915857"},"1":{"get_star_ts":"1543915751"}},"3":{"2":{"get_star_ts":"1543844810"},"1":{"get_star_ts":"1543844649"}},"1":{"2":{"get_star_ts":"1543828757"},"1":{"get_star_ts":"1543654211"}},"23":{"2":{"get_star_ts":"1546638474"},"1":{"get_star_ts":"1546262133"}},"17":{"2":{"get_star_ts":"1546159136"},"1":{"get_star_ts":"1546159088"}},"25":{"2":{"get_star_ts":"1546638507"},"1":{"get_star_ts":"1546441207"}},"7":{"1":{"get_star_ts":"1544177334"},"2":{"get_star_ts":"1544179024"}},"10":{"2":{"get_star_ts":"1544438249"},"1":{"get_star_ts":"1544438218"}},"8":{"2":{"get_star_ts":"1544273070"},"1":{"get_star_ts":"1544270337"}},"16":{"1":{"get_star_ts":"1545233633"},"2":{"get_star_ts":"1545338402"}},"14":{"2":{"get_star_ts":"1545028942"},"1":{"get_star_ts":"1544986949"}},"11":{"2":{"get_star_ts":"1544520723"},"1":{"get_star_ts":"1544517871"}},"22":{"1":{"get_star_ts":"1546213058"},"2":{"get_star_ts":"1546590986"}},"24":{"2":{"get_star_ts":"1546439078"},"1":{"get_star_ts":"1546433420"}},"21":{"1":{"get_star_ts":"1545947800"},"2":{"get_star_ts":"1546209802"}}},"name":"name fsdf"},"622705":{"stars":1,"global_score":0,"local_score":6,"last_star_ts":"1573741255","completion_day_level":{"1":{"1":{"get_star_ts":"1573741255"}}},"id":"622705","name":"name ffdahlf"}}}'; SELECT A.[event] ,A.owner_id ,B.[key] AS MemberNumber ,C.id ,C.local_score ,C.global_score ,C.stars ,C.[name] ,C.last_star_ts ,D.[key] AS WhatEverNumberThisIs ,E.[key] AS AndWhatEverThisNumberIs ,JSON_VALUE(E.[value],'$.get_star_ts') AS get_star_ts FROM OPENJSON(@json) WITH([event] int ,owner_id int ,members NVARCHAR(MAX) AS JSON) A CROSS APPLY OPENJSON(A.members) B CROSS APPLY OPENJSON(B.[value]) WITH(local_score int ,stars int ,global_score int ,[name] NVARCHAR(1000) ,id int ,last_star_ts int ,completion_day_level NVARCHAR(MAX) AS JSON ) C CROSS APPLY OPENJSON(C.completion_day_level) D CROSS APPLY OPENJSON(D.[value]) E;

简而言之:

我们使用OPENJSON的级联。嵌套的JSON返回AS JSON,可在下一个OPENJSON中使用。

© www.soinside.com 2019 - 2024. All rights reserved.