防止 JSON4S 跳过缺少字段的 JSON 个对象
Prevent JSON4S from skipping JSON objects with a missing field
假设我有一个像这样的简单 JSON 数组:
[
{
"name": "Alex",
"age": 12
},
{
"name": "Peter"
}
]
请注意,第二个对象没有 age
字段。
我正在使用 JSON4S 查询 JSON(使用 for-comprehension
样式来提取值):
for {
JArray(persons) <- json
JObject(person) <- persons
JField("name", JString(name)) <- person
JField("age", JString(age)) <- person
} yield new Person(name, age)
我的问题是这个表达式将跳过第二个对象(缺少 age
字段的对象)。我不想跳过这些对象;我需要将其设置为 null
或更好的 None
。
This answer 给出了如何使用自定义提取器处理 JSON 中的 null
值的示例,但它仅在字段存在且其值为 null
。
解构 json4s 中的对象可能会带来一些不便,因为您不能再使用花哨的 \
和 \
查询。
我更喜欢这样做:
for {
JArray(persons) <- json
person@JObject(_) <- persons
JString(name) <- person \ "name"
age = (person \ "age").extractOpt[Int]
} yield (name, age)
res7: List[(String, Option[Int])] = List(("Alex", Some(12)), ("Peter", None))
此示例还说明了如何提取对象字段的两种替代方法(您也可以改用 name = (person \ "name").extract[String]
)。
假设我有一个像这样的简单 JSON 数组:
[
{
"name": "Alex",
"age": 12
},
{
"name": "Peter"
}
]
请注意,第二个对象没有 age
字段。
我正在使用 JSON4S 查询 JSON(使用 for-comprehension
样式来提取值):
for {
JArray(persons) <- json
JObject(person) <- persons
JField("name", JString(name)) <- person
JField("age", JString(age)) <- person
} yield new Person(name, age)
我的问题是这个表达式将跳过第二个对象(缺少 age
字段的对象)。我不想跳过这些对象;我需要将其设置为 null
或更好的 None
。
This answer 给出了如何使用自定义提取器处理 JSON 中的 null
值的示例,但它仅在字段存在且其值为 null
。
解构 json4s 中的对象可能会带来一些不便,因为您不能再使用花哨的 \
和 \
查询。
我更喜欢这样做:
for {
JArray(persons) <- json
person@JObject(_) <- persons
JString(name) <- person \ "name"
age = (person \ "age").extractOpt[Int]
} yield (name, age)
res7: List[(String, Option[Int])] = List(("Alex", Some(12)), ("Peter", None))
此示例还说明了如何提取对象字段的两种替代方法(您也可以改用 name = (person \ "name").extract[String]
)。