輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)-創(chuàng)新互聯(lián)

JSON作為一種輕量級(jí)的數(shù)據(jù)交換格式,因其易于讀寫(xiě)和交互的特點(diǎn),已逐漸成為主流的數(shù)據(jù)類型之一。常見(jiàn)的編程語(yǔ)言大多都對(duì) JSON 的讀取與解析提供了接口,但是接下來(lái)如何把多層 JSON 數(shù)據(jù)經(jīng)過(guò)篩選、計(jì)算并展開(kāi)成二維數(shù)據(jù),就需要開(kāi)發(fā)人員去頭疼了。本文就為大家分享一下如何利用集算器 SPL(結(jié)構(gòu)化處理語(yǔ)言)輕松解決 JSON 數(shù)據(jù)解析入庫(kù)的問(wèn)題。

目前創(chuàng)新互聯(lián)建站已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、漢壽網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

JSON 數(shù)據(jù)文件導(dǎo)入與解析

根據(jù) JSON 數(shù)據(jù)文件的復(fù)雜程度,以及不同的需求,我們會(huì)分三種情況來(lái)討論:

1. 單層的 JSON 數(shù)據(jù)文件

我們先從一個(gè)簡(jiǎn)單的例子入手,看看普通鍵值映射的 JSON 文件如何讀取。下面是某產(chǎn)品訂單信息的 JSON 數(shù)據(jù)文件:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

SPL導(dǎo)入 JSON 數(shù)據(jù)文件只需要簡(jiǎn)單的一句腳本:

= json(file("product.json").read())

不需要寫(xiě)循環(huán)函數(shù),也不用解析 JSON 對(duì)象,執(zhí)行一下就可以看到,JSON 數(shù)據(jù)文件已經(jīng)轉(zhuǎn)換為二維數(shù)據(jù)序表了:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

2. 明細(xì)數(shù)據(jù)相同結(jié)構(gòu)的多層 JSON 數(shù)據(jù)文件

接下來(lái),我們看一下多層的 JSON 文件如何處理。下面是我們要用到的 JSON 數(shù)據(jù)文件 orders.json:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

可以看到,JSON 數(shù)據(jù)分為兩層,第一層是 "貨主國(guó)家" 和 "貨主地區(qū)",第二層是明細(xì)數(shù)據(jù)?,F(xiàn)在我們想要從中導(dǎo)入中國(guó)華北和華南地區(qū) 2013 年的訂單,讓我們看看如果用 SPL 實(shí)現(xiàn)。

這次我們先來(lái)定義一下參數(shù):Country、Area 和 Year,分別對(duì)應(yīng)需要導(dǎo)入的貨主國(guó)家、貨主地區(qū)和訂購(gòu)日期的年份。通過(guò)定義參數(shù),以后導(dǎo)入不同國(guó)家、地區(qū)和年份的時(shí)候,就不再需要修改 SPL,只需要提供相應(yīng)的參數(shù)值就行了。這里需要注意的是,Area 的值是序列,默認(rèn)值是 [華北, 華南],這樣就可以同時(shí)讀取多個(gè)地區(qū)的數(shù)據(jù)。如下圖:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

我們先看一下 SPL 腳本:


A

B

1

=json(file("orders.json").read())

=A1.select(貨主國(guó)家 ==Country  && Area.contain( 貨主地區(qū)))

2

=B1.news(區(qū)域訂單;B1. 貨主國(guó)家: 貨主國(guó)家,B1. 貨主地區(qū): 貨主地區(qū),#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13)

=A2.select(year( 訂購(gòu)日期)==Year)

下面來(lái)詳細(xì)解釋一下:

第一步:A1 中 =json(file("orders.json").read()),導(dǎo)入 JSON 文件生成序表。執(zhí)行一下,可以看到 JSON 數(shù)據(jù)按層級(jí)被展現(xiàn)出來(lái)(在集算器設(shè)計(jì)器中我們可以通過(guò)雙擊“區(qū)域訂單”值,來(lái)查看下一層明細(xì)數(shù)據(jù)):

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

第二步:從圖中可以看到,"貨主國(guó)家" 和 "貨主地區(qū)" 字段就在第一層,因此在 B1 中直接調(diào)用A1.select(貨主國(guó)家 ==Country && Area.contain( 貨主地區(qū))) 就可以篩選出中國(guó)華北和華南的數(shù)據(jù)。

第三步:"區(qū)域訂單" 是我們想要的明細(xì)數(shù)據(jù),但是其中不包含 "貨主國(guó)家" 和 "貨主地區(qū)" 這兩個(gè)字段,因此我們需要把這兩個(gè)字段和區(qū)域訂單的明細(xì)字段拼在一起。這么復(fù)雜的需求通過(guò) news 函數(shù)就可以一步到位解決。從 A2 格的表達(dá)式可以看到參數(shù)并不復(fù)雜,把 B1. 貨主國(guó)家,B1. 貨主地區(qū)和 "區(qū)域訂單" 的全部字段拼在一起就可以了。看下執(zhí)行結(jié)果:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

第四步:在 B2 中通過(guò)=A2.select(year( 訂購(gòu)日期)==Year)篩選出 "訂購(gòu)日期" 的年份是 2013 年的數(shù)據(jù)。

最后讓我們執(zhí)行一下,可以看到最終得到的二維表完全符合需求:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

3. 明細(xì)數(shù)據(jù)不同結(jié)構(gòu)的多層 JSON 數(shù)據(jù)文件

因?yàn)閿?shù)據(jù)來(lái)源的復(fù)雜性,JSON 數(shù)據(jù)文件的明細(xì)數(shù)據(jù)有可能是不同結(jié)構(gòu)的,我們一起看一下這種 JSON 文件如何處理。下面是我們要用到的 JSON 文件 sales.json:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

第一層以年和月為維度,第二層以國(guó)家為維度,第三層是明細(xì)數(shù)據(jù)。但是明細(xì)數(shù)據(jù)中,由于銷售渠道不同,結(jié)構(gòu)是不完全一致的,比如 "PRODUCTLINE"、"ADDRESSLINE1"、"ADDRESSLINE2" 在明細(xì)數(shù)據(jù)中并不是必須的?,F(xiàn)在,我們要從數(shù)據(jù)中讀取 2017 和 2018 年北美兩個(gè)大國(guó)美國(guó)和加拿大的銷售數(shù)據(jù)。

為了使用方便,我們還是先定義兩個(gè)參數(shù):Year 和 Country:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

接下來(lái)先看一下 SPL:


A

B

1

=json(file("sales.json").read())

=A1.select(Year.contain(YEAR))

2

=B1.news(MONTHLY_SALES;B1.YEAR:YEAR,B1.MONTH:MONTH,#1,#2)

=A2.select(Country.contain(COUNTRY))

3

=B2.news(NATIONAL_MONTHLY_SALES;B2.YEAR:YEAR,B2.COUNTRY:COUNTRY,ORDERNUMBER,QUANTITYORDERED,PRICEEACH,ORDERLINENUMBER,SALES,ORDERDATE,STATUS,QTR_ID,PRODUCTLINE,MSRP,PRODUCTCODE,CUSTOMERNAME,PHONE,ADDRESSLINE1,ADDRESSLINE2,CITY,STATE,POSTALCODE,TERRITORY,CONTACTLASTNAME,CONTACTFIRSTNAME,DEALSIZE)


下面來(lái)詳細(xì)解釋一下。

A1格還是把 JSON 文件導(dǎo)入為多層序表。

由于年份字段就在第一層,B1 格中直接調(diào)用A1.select(Year.contain(YEAR))可以從 A1 中篩選出 2017 和 2018 年份的數(shù)據(jù):

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

接下來(lái) A2 格中我們?cè)俅斡玫搅?news 函數(shù),用來(lái)把年月字段和下一層的月銷售明細(xì)拼在一起:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

B2格中我們通過(guò)A2.select(Country.contain(COUNTRY))從中篩選出來(lái)美國(guó)和加拿大的數(shù)據(jù)。

然后在 A3 格中,我們?cè)俅斡玫搅?news 函數(shù),這次需要把 YEAR,MONTH,COUNTRY 和再下一層的國(guó)家月銷售明細(xì)拼在一個(gè)序表中。由于這個(gè)文件中明細(xì)數(shù)據(jù)可能結(jié)構(gòu)有所不同,我們使用全量的字段名作為參數(shù)來(lái)創(chuàng)建序表。字段的值會(huì)根據(jù)名稱設(shè)置,無(wú)此字段的會(huì)缺省為空值(例如下圖 "ADDRESSLINE1" 和 "ADDRESSLINE2" 字段):

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

執(zhí)行后可以看到最終結(jié)果:

輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)

至此,一個(gè)多層結(jié)構(gòu)的明細(xì)數(shù)據(jù)結(jié)構(gòu)不完全一致的 JSON 文件就成功展開(kāi)成為一個(gè)二維表了。

序表入庫(kù)

前面介紹了常見(jiàn)的 JSON 數(shù)據(jù)文件導(dǎo)入與解析,接下來(lái)是數(shù)據(jù)入庫(kù)的問(wèn)題。之所以在最后才說(shuō)入庫(kù),并不是因?yàn)閺?fù)雜,恰恰相反的是,由于前面的例子中最后生成的都是序表,因此更新數(shù)據(jù)庫(kù)就變得非常簡(jiǎn)單方便。以前面導(dǎo)入 JSON 的例子 2 中的訂單表為例:


A

1

=file("orders.json").read().import@j().select(貨主國(guó)家 ==Country && 貨主地區(qū) ==Area). 區(qū)域訂單.select(year( 訂購(gòu)日期)==Year).derive(Country: 貨主國(guó)家,Area: 貨主地區(qū))

2

=connect("demo").update(A1, 訂單; 訂單 ID)

可以看到,更新數(shù)據(jù)庫(kù)只需要一句腳本!

這里是比較常見(jiàn)的通過(guò)主鍵更新,用序表 A1 通過(guò)主鍵訂單 ID 來(lái)更新數(shù)據(jù)庫(kù)中的訂單表。SPL 中的 update 函數(shù)有很多選項(xiàng),可以滿足更多的更新數(shù)據(jù)需求,這里就不再一一贅述了。

      因此,只要用對(duì)了工具,從 JSON 文件導(dǎo)入解析到數(shù)據(jù)入庫(kù),再繁瑣的任務(wù)也可以輕松應(yīng)對(duì)。除了 JSON 數(shù)據(jù)文件,集算器 SPL 還支持各種豐富多樣的數(shù)據(jù)來(lái)源,后續(xù)將通過(guò)更多的文章繼續(xù)分享給大家。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站標(biāo)題:輕松應(yīng)對(duì)多層JSON數(shù)據(jù)計(jì)算與入庫(kù)-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article12/dddigc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序網(wǎng)站收錄、外貿(mào)網(wǎng)站建設(shè)服務(wù)器托管、微信公眾號(hào)、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)