mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09:21 +08:00
Merge pull request #604 from square/eric.💲
Fix dollar sign escaping for json key names.
This commit is contained in:
@@ -303,7 +303,7 @@ internal class AdapterGenerator(
|
|||||||
|
|
||||||
result.addStatement("%N.beginObject()", writerParam)
|
result.addStatement("%N.beginObject()", writerParam)
|
||||||
propertyList.forEach { property ->
|
propertyList.forEach { property ->
|
||||||
result.addStatement("%N.name(%S)", writerParam, property.jsonName)
|
result.addStatement("%N.name(\"${property.jsonName}\")", writerParam)
|
||||||
result.addStatement("%N.toJson(%N, %N.%L)",
|
result.addStatement("%N.toJson(%N, %N.%L)",
|
||||||
nameAllocator.get(property.delegateKey), writerParam, valueParam, property.name)
|
nameAllocator.get(property.delegateKey), writerParam, valueParam, property.name)
|
||||||
}
|
}
|
||||||
|
@@ -128,7 +128,7 @@ internal data class TargetProperty(
|
|||||||
private val Element?.jsonName: String?
|
private val Element?.jsonName: String?
|
||||||
get() {
|
get() {
|
||||||
if (this == null) return null
|
if (this == null) return null
|
||||||
return getAnnotation(Json::class.java)?.name
|
return getAnnotation(Json::class.java)?.name?.replace("$", "\\$")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString() = name
|
override fun toString() = name
|
||||||
|
@@ -55,6 +55,27 @@ class GeneratedAdaptersTest {
|
|||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class JsonAnnotation(@Json(name = "foo") val bar: String)
|
data class JsonAnnotation(@Json(name = "foo") val bar: String)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun jsonAnnotationWithDollarSign() {
|
||||||
|
val adapter = moshi.adapter(JsonAnnotationWithDollarSign::class.java)
|
||||||
|
|
||||||
|
// Read
|
||||||
|
@Language("JSON")
|
||||||
|
val json = "{\"\$foo\": \"bar\"}"
|
||||||
|
|
||||||
|
val instance = adapter.fromJson(json)!!
|
||||||
|
assertThat(instance.bar).isEqualTo("bar")
|
||||||
|
|
||||||
|
// Write
|
||||||
|
@Language("JSON")
|
||||||
|
val expectedJson = "{\"\$foo\":\"baz\"}"
|
||||||
|
|
||||||
|
assertThat(adapter.toJson(JsonAnnotationWithDollarSign("baz"))).isEqualTo(expectedJson)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class JsonAnnotationWithDollarSign(@Json(name = "\$foo") val bar: String)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun defaultValues() {
|
fun defaultValues() {
|
||||||
val adapter = moshi.adapter(DefaultValues::class.java)
|
val adapter = moshi.adapter(DefaultValues::class.java)
|
||||||
|
Reference in New Issue
Block a user