国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

集算器協(xié)助Java處理JSON

2019-11-14 15:01:02
字體:
來源:轉載
供稿:網(wǎng)友

  json是半結構化數(shù)據(jù),java只能簡單解析,很難進行深度計算。集算器支持集合運算、有序計算、動態(tài)腳本執(zhí)行,可降低json的計算難度。集算器還提供了簡單易用的JDBC接口,JAVA可將集算器腳本文件當做數(shù)據(jù)庫存儲過程執(zhí)行,傳入?yún)?shù)并用JDBC獲得返回結果,詳情參考集算器用作Java計算類庫的應用結構。

  下面舉例說明JAVA處理json時常見的難題,以及集算器對應的解法。

  json分組匯總

  order.json存儲著訂單記錄,現(xiàn)在要按時間段匯總每個月每個客戶貢獻的銷售額,部分源數(shù)據(jù)如下:

esProc_java_json_1

  集算器代碼:

 

A

1

=file(“D://order.json”).read().import@j()

2

=A1.select(OrderDate>=argBegin && OrderDate<=argEnd)

3

=A2.groups(month(OrderDate):Month,Client;sum(Amount):subtotal)

  將json文件讀為二維表,進行性條件查詢,再進行分組匯總,其中argBegin、argEnd是JAVA參數(shù)。結果如下:

esProc_java_json_3

  解析字段不定的json

  Data.json每個文檔的字段數(shù)不定,字段順序不定,如下:

esProc_java_json_4

  需要用JAVA程序將該文件輸出到csv,期望的格式如下:

esProc_java_json_5

  集算器代碼:

1

=file(“d://data.json”).read().import@j()

2

=A1.People

3

=file(“D://result.csv”).export(A2;”,”)

  將json讀入內存,取出People字段,以逗號為分隔符寫入文件,其中A2如下:

esProc_java_json_7

  將多層json輸出為csv

  源json文件如下:

esProc_java_json_8

  期望在CSV中分兩列擺放,如下:

esProc_java_json_9

  難點在于root的字段名要和下級合并,下級字段名和字段值要各對應結果中的一列。集算器代碼:

1

=file(“d://source.json”).read().import@j()

2

=A1.fno().(pjoin([f=A1.field(~)].fname():key,f.array():value))

3

=A2.(~.record@i([A1.fname(#),null],1))

4

=A3.conj()

5

=file(“D://result.csv”).export(A4;”,”)

  讀入json文件,將數(shù)據(jù)按root數(shù)分為3組,如下(A2):

esProc_java_json_11

  之后將[root字段名,null]作為記錄插入各組第1條,再合并各組記錄,最后導出。Csv文件如下:

esProc_java_json_12

  動態(tài)json入庫

  s.json包含多層子文檔,其LIST子文檔和SERVICE子文檔的字段數(shù)不定,要求用JAVA將s.json導入庫表groups和service,規(guī)則是GROUPNAME的值和SERVICE的字段名對應數(shù)據(jù)庫表groups,SERVICE的每個字段對應庫表service,groups和service以groupsid相關聯(lián)。

  源數(shù)據(jù)如下:

esProc_java_json_13

  集算器代碼:

 

A

B

C

D

1

=file(“E://s.json”).read().import@j()

2

=create(Groupname,groupid)

3

=create(Serviceid,Servicename,groupid,Credit,Time,INFO,Network,Mobile,PRovider,
PIN,KBH,MEP,PRD,Type,Locks,Reference)

4

for A1.SUCCESS=A4.LIST  

5

 for B4.fno()=B4.field(B5)

6

  =C5.SERVICES

7

  for C6.fno()=C6.fname(C7) 

8

   =C6.field(C7) 

9

   =A2.record([C5.GROUPNAME,D7]) 

10

   =A3.record([D8.#1,D8.#2,D7,D8.#3,D8.#4,
D8.#5,D8.#6,D8.#7,D8.#8,D8.#9,
D8.#10,D8.#11,D8.#12,D8.#13,
D8.#14,D8.#15])
 

11

=mssql.update(A2,groups,Groupname,groupid;groupid)

12

=mssql.update(A3,services,Serviceid,Servicename,groupid,Credit,Time,INFO,Network,
Mobile,Provider,PIN,KBH,MEP,PRD,Type,Locks,Reference;Serviceid)

  保持結構讀入json文件,分別循環(huán)SUCCESS的每個子文檔(B4-D10)、List的每個字段(C5-D10)、Service的每個字段(D7-D10),將對應的記錄追加到空二維表A2、A3,最后入庫。代碼中用到了訪問二維表結構的幾個函數(shù),其中fno可取得字段數(shù),fname按序號取得字段名,field可按序號取得字段值。

  追加記錄后A2、A3分別如下:

esProc_java_json_15


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 无极县| 安顺市| 卫辉市| 静乐县| 镇安县| 巢湖市| 耿马| 普格县| 海阳市| 金阳县| 建瓯市| 湖南省| 南投市| 沙雅县| 丰顺县| 凌源市| 定西市| 拉萨市| 封开县| 靖边县| 青州市| 宣恩县| 钟山县| 大名县| 沙洋县| 塘沽区| 资兴市| 江油市| 开江县| 潜江市| 定远县| 浦东新区| 康定县| 贵德县| 岚皋县| 依安县| 玉环县| 怀柔区| 新乐市| 古蔺县| 获嘉县|