java 如何簡單快速處理 json 中的資料

xiaohuihui發表於2020-06-28

JSONstr.json的runners欄位是子文件,子文件有3個欄位:horseId、ownerColours、trainer,其中trainer含有下級欄位trainerId。需要根據文件序號查詢對應子文件的horseId、ownerColours、trainerId欄位。部分源資料如下:

[

   {

      "race": {

          "raceId":"1.33.1141109.2",

          "meetingId":"1.33.1141109"

      },

      ...

      "numberOfRunners": 2,

      "runners": [

        {

              "horseId":"1.00387464",

              "trainer": {

                  "trainerId":"1.00034060"

              },

          "ownerColours":"Maroon,pink sleeves,dark blue cap."

          },

          {

              "horseId":"1.00373620",

              "trainer": {

                  "trainerId":"1.00010997"

              },

          "ownerColours":"Black,emerald green cross of lorraine,striped sleeves."

          }

      ]

   },

...

]

期望Json結構化後的效果:

java 如何簡單快速處理 json 中的資料

Java只提供瞭解析Json的基礎類庫,但API介面多而繁瑣,如果想進行深入的計算,仍然需要複雜硬編碼。大概要寫成這樣:

...

JSONObject jsonObject = JSONObject.fromObject(s);

JSONArray result = jsonObject.getJSONArray("runners");

for (int i = 0; i < result.size(); i++) {

        JSONArray index = result.getJSONObject(i).getJSONArray("index");

        ...

}

...

Json解析,用集算器SPL會簡單很多,它把Json類庫做了二次封裝,且有豐富強大的集合運算能力,所以很容易應對。比如上面問題,取出第 1 個 runners 欄位 (子文件),僅需3行:


A

1

=json(file("/workspace/JSONstr.json").read())

2

=A1(1).runners

3

=A2.new(horseId,trainer.trainerId:trainerId,ownerColours)

Json 解析出來一般都是為了計算,所以 SPL 還能更方便地計算,比如:按 horseId 分組統計每組中 ownerColours 出現的次數;只需在此基礎上增加 1 行:=A3.groups(horseId;~.array().count():times)。其實還有很多情況用Java解析Json不太方便,甚至計算入庫等需求,但用集算器SPL卻很簡單,感興趣可以參考: 。

集算器還很容易嵌入到Java應用程式中, 有使用和獲得它的方法。

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2700773/,如需轉載,請註明出處,否則將追究法律責任。

相關文章