Scala で JSON 文字列を解析する

Suraj P 2023年6月21日
  1. Option を使用して Scala で JSON 文字列を解析する
  2. API を使用して Scala で JSON 文字列を解析する
  3. まとめ
Scala で JSON 文字列を解析する

この記事では、Scala プログラミング言語で JSON 文字列を解析する方法を説明します。

JSON は、Web サーバーとの間でやり取りされる一般的な形式です。 ここでの目的は、オブジェクトの配列を持つ JSON 文字列が与えられた場合に、それを Scala オブジェクトにデシリアライズして、アプリケーションで使用できるようにすることです。

プレーンな Scala メソッドと機能を使用して JSON を解析するか、さまざまな API とライブラリを使用して、Lift-JSON ライブラリや Circe などの JSON ファイルを解析できます。

Option を使用して Scala で JSON 文字列を解析する

Option を Scala のパターン マッチと共に使用して、JSON 文字列を解析できます。 次の JSON 文字列があるとします。

{
        "languages": [{
            "name": "English",
            "is_active": true,
            "completeness": 4.5
        }, {
            "name": "Japanese",
            "is_active": true,
            "completeness": 1.4
        }]
}

以下のコードを使用して、Scala オブジェクトにマップできます。

class parse[T]
{
    def unapply(X:Option[Any]):Option[T] = if(X.isEmpty) {
        None
    } else {
        Some(X.get.asInstanceOf[T])
    }
}

object A extends parse[Map[String,Any]]
object B extends parse[List[Any]]
object C extends parse[String]
object D extends parse[Double]
object E extends parse[Boolean]

for{
    A(mp) <- List(JSON.parseFull(str))
    B(languages) = mp.get("languages")
    language<-languages
    A(temp) = Some(language)
    C(store_name) = temp.get("name")
    E(check_active) = temp.get("is_active")
    D(completeness_level) = temp.get("completeness")
}
yield{
    (store_name,check_active,completeness_level)
}

API を使用して Scala で JSON 文字列を解析する

よく知られた Lift-JSON ライブラリを使用して、JSON 文字列を解析できます。 このライブラリには、JSON 文字列を Scala オブジェクトに逆シリアル化するために使用できる多くのメソッドが含まれています。

コード例:

import net.liftweb.json.DefaultFormats
import net.liftweb.json._

case class Employee(
    Name: String,
    id: Int,
    username: String,
    password: String,
    DepartmentsWorking: List[String]
)

object ParseJsonArray extends App {
    implicit val formats = DefaultFormats

    val str ="""
    {
      "employees": [
    { "Account": {
      "Name": "YMail",
      "id": 3,
      "username": "srj",
      "password": "123456srj",
      "DepartmentsWorking": ["sales", "IT", "HR"]
    }},
    ]}
    """

    val json = parse(str)
    val contents = (json \\ "Account").children
    for (temp <- contents) {
        val m = temp.extract[Employee]
        println(s"Employee: ${m.Name}, ${m.id}")
        println(" Departments working: " + m.DepartmentsWorking.mkString(","))
    }
}

上記のコードでは、JSON データに一致するケース クラス Employee を作成しました。

API を使用する利点は、より簡潔なコードを記述し、基本的な Scala メソッドが提供しない多くの機能を提供するのに役立つことです。

まとめ

この記事では、プレーンな古い Scala メソッドを使用する方法と、よく知られた API を使用して JSON 文字列を解析する別の方法を使用する方法の 2つの方法を見てきました。 また、記述の単純さとその機能により、解析中は常に API が優先されることを理解しました。

著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub