質問編集履歴
4
JSONキーをダブルクオートでかこみました。JSON内dateプロパティ末尾の不要なカンマを削除しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,12 +2,13 @@
|
|
2
2
|
YYYY-MM-DD 形式のjson文字列をNaiveDateに変換したい
|
3
3
|
|
4
4
|
```rust
|
5
|
-
|
5
|
+
let json_str = r#"
|
6
|
-
|
6
|
+
{
|
7
|
-
|
7
|
+
"id": 1,
|
8
|
-
|
8
|
+
"date": "2021-03-15"
|
9
|
-
|
9
|
+
}"#;
|
10
10
|
```
|
11
|
+
|
11
12
|
↓
|
12
13
|
|
13
14
|
```rust
|
3
Fix typo (D::Deserializer -> Deserializer)
title
CHANGED
File without changes
|
body
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
```
|
79
79
|
|
80
80
|
↑ 返り値の型が違うのでここでこのまま返せないのはわかっているんですが、matchなりmap_errを使ったあとに、
|
81
|
-
どうやって `chrono::ParseError` から `
|
81
|
+
どうやって `chrono::ParseError` から `Deserializer<'de>` オブジェクトを作ればよいのでしょう?
|
82
82
|
|
83
83
|
|
84
84
|
## cargo build の結果
|
2
TypoFix
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,8 +76,11 @@
|
|
76
76
|
nd
|
77
77
|
}
|
78
78
|
```
|
79
|
-
↑ 返り値の型が違うのでここでこのまま返せないのはわかっているんですが、matchなり、map_errを使うったあとに、どうやって `D::Deserializer<'de>` オブジェクトを作ればよいのでしょう、
|
80
79
|
|
80
|
+
↑ 返り値の型が違うのでここでこのまま返せないのはわかっているんですが、matchなりmap_errを使ったあとに、
|
81
|
+
どうやって `chrono::ParseError` から `D::Deserializer<'de>` オブジェクトを作ればよいのでしょう?
|
82
|
+
|
83
|
+
|
81
84
|
## cargo build の結果
|
82
85
|
```
|
83
86
|
|
|
1
不要なコメントアウト部分を削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,7 +14,6 @@
|
|
14
14
|
#[derive(Serialize, Deserialize, Debug)]
|
15
15
|
struct Record {
|
16
16
|
id: i32,
|
17
|
-
|
18
17
|
#[serde(with="yyyy_mm_dd_fmt")]
|
19
18
|
date: NaiveDate,
|
20
19
|
}
|
@@ -26,7 +25,6 @@
|
|
26
25
|
mod yyyy_mm_dd_fmt {
|
27
26
|
use chrono::{NaiveDate};
|
28
27
|
use serde::{self, Deserialize, Serializer, Deserializer};
|
29
|
-
|
30
28
|
const FORMAT: &'static str = "%Y-%m-%d";
|
31
29
|
|
32
30
|
pub fn serialize<S>(date: &NaiveDate, serializer: S) -> Result<S::Ok, S::Error>
|
@@ -36,7 +34,6 @@
|
|
36
34
|
serializer.serialize_str(&s)
|
37
35
|
}
|
38
36
|
|
39
|
-
|
40
37
|
pub fn deserialize<'de, D>(deserializer: D) -> Result<NaiveDate, D::Error>
|
41
38
|
where D: Deserializer<'de>,
|
42
39
|
{
|
@@ -48,13 +45,10 @@
|
|
48
45
|
|
49
46
|
use serde::{Serialize, Deserialize};
|
50
47
|
use chrono::NaiveDate;
|
51
|
-
// use std::time::{Duration, Instant};
|
52
48
|
|
53
|
-
|
54
49
|
#[derive(Serialize, Deserialize, Debug)]
|
55
50
|
struct Record {
|
56
51
|
id: i32,
|
57
|
-
|
58
52
|
#[serde(with="yyyy_mm_dd_fmt")]
|
59
53
|
date: NaiveDate,
|
60
54
|
}
|