最近開了新的kotlin maven專案後,發現與gson有相容性問題,不像android中可以直接使用,試了幾種方式後,決定使用kotlin所提供的Serialization JSON方法。
1.到pom.xml
中指定properties
serialization.version
版本、新增repository
來源、新增kotlinx-serialization-json
kotlinx-serialization-core
kotlin-serialization-compiler-plugin
模組,須注意kotlin.version
與serialization.version
會有相容性上的問題,必須要互相搭配:
<properties> <kotlin.version>2.0.0</kotlin.version> <serialization.version>1.8.0</serialization.version> </properties> <repositories>> <repository> <id>kotlinx</id> <url>https://kotlin.bintray.com/kotlinx</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-serialization-core-jvm</artifactId> <version>${serialization.version}</version> </dependency> <dependency> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kotlinx-serialization-json-jvm</artifactId> <version>${serialization.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-serialization-compiler-plugin --> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-serialization-compiler-plugin</artifactId> <version>2.0.21</version> </dependency> </dependencies>
2.序列化的檔案必須要編譯過才能使用,所以下方的plugin也要加入kotlinx-serialization
<build> <plugins> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <configuration> <compilerPlugins> <plugin>kotlinx-serialization</plugin> </compilerPlugins> </configuration> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-serialization</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
3.在module-info.java
加入requires
requires kotlinx.serialization.core; requires kotlinx.serialization.json;
4.建立data class檔案,裡面放json的格式
import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class RawdataAi( @SerialName("DeviceId") val deviceId: String, @SerialName("ThermalArray") val thermalArray: List<Float> )
@Serializable
一定要標記,系統才認得出來
@SerialName("DeviceId")
可以自訂JSON Key名稱所對應的變數名稱,方便處理JSON來的欄位名稱規則會與kotlin不一致的問題
5.由字串解析(反序列化)
val json = """{ "GatewayId": "G001", "ThermalArray": [ 100.1, 111.6, 180.2, 222.5 ] }""" val myData = Json.decodeFromString<RawdataAi>(json) println(myData)
6.由data class物件轉回JSON字串(序列化)
val jsonString = Json.encodeToString(myData) println(jsonString)
-END-
發佈留言