teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

表現の修正

2020/04/19 15:23

投稿

kotori_a
kotori_a

スコア898

answer CHANGED
@@ -22,16 +22,16 @@
22
22
  json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
23
23
 
24
24
  ```
25
- というのは、jsonが正しくパースできていない、ということを意味します。
26
25
 
27
- すなわちr.json()メソッド段階で、requests.post()の戻り値が正しいjsonフォマットのデータを返ていないということが推測されます。
26
+ JSONDecodeErrorは、jsonのスに失敗ことを意味します。
28
27
 
28
+ すなわち、requests.post()の戻り値 r が正しいjsonフォーマットではないということが推測されます。
29
+
29
30
  そこで、requests.post()の戻り値を直接見るために
30
31
  ```
31
32
  print(r.json()['header'])
32
33
  ```
33
34
 
34
-
35
35
  ```
36
36
  print(r.text)
37
37
  ```
@@ -43,7 +43,7 @@
43
43
  ```
44
44
  というような、htmlのエラーソースが出てくるはずです。
45
45
 
46
- すなわち、r.json()の段階で、htmlを無理やりjsonデータとしてパースしようとしていたので、JsonDecodeErrorが発生していたということが推測できます。
46
+ すなわち、r.json()の段階で、htmlを無理やりjsonデータとしてパースしようとしていたので、JsonDecodeErrorが発生したということがわかります。
47
47
 
48
48
  ## 2
49
49
  このHTMLは冒頭がstatus 400となっていますが、

2

表現の修正

2020/04/19 15:23

投稿

kotori_a
kotori_a

スコア898

answer CHANGED
@@ -10,10 +10,7 @@
10
10
 
11
11
  ## 1
12
12
 
13
- まず、エラーの内きちんと確認しましょう。
13
+ まず、エラーの内を確認しましょう。
14
-
15
- エラーを把握するには、**スクリプトの手順を丁寧に分解**する必要があります。
16
-
17
14
  スタックトレースをたどると
18
15
  ```
19
16
  print(r.json()['header'])
@@ -60,13 +57,13 @@
60
57
  しかし、上記のpythonスクリプトでは、jsonではなく、htmlでエラーが返ってきました。
61
58
  htmlでエラーが返ってくるということは、**postのフォーマット自体が正しくない**、ということが推測されます。
62
59
 
63
- ここでrequestを見ると、
60
+ ここでpost部分を見ると、
64
61
  ```
65
62
  r = session.post(url,json=data)
66
63
  ```
67
64
  となっています。
68
65
 
69
- ここが誤りで、requestsjsonパラメータにデータを渡すときは、辞書ではなく、json文字列を渡さなければなりません。
66
+ ここが誤りで、requestsjsonパラメータにデータを渡すときは、辞書ではなく、json文字列を渡さなければなりません。
70
67
 
71
68
  すなわち、正しくは、
72
69
  ```

1

表現の修正

2020/04/19 15:14

投稿

kotori_a
kotori_a

スコア898

answer CHANGED
@@ -51,13 +51,14 @@
51
51
  ## 2
52
52
  このHTMLは冒頭がstatus 400となっていますが、
53
53
  仮に正しいjsonでpostしていたならば、jsonフォーマットでエラーメッセージが返ってくるはず。
54
- たとえばあなたも試されたかもしれません、ChromeでDev Toolsを開き、calculateボタンを押したときのpostをそのまま開けば
54
+ たとえばあなたも試されたかもしれませんが)、ChromeでDevelopers Toolsを開き、calculateボタンを押したときのpostをそのまま開くと
55
55
  ```
56
56
  {"header":{"result":"error","systemError":{"errorCode":"DSS_U001","type":"E","severity":"Application","errorMessage":"Technical Error Occurred","validationErrors":[],"contentType":"application/json","channel":"6"}}}
57
57
  ```
58
58
  というjsonフォーマットのエラーが返ってきます。
59
59
 
60
+ しかし、上記のpythonスクリプトでは、jsonではなく、htmlでエラーが返ってきました。
60
- htmlでエラーが返ってくるということは、postのフォーマット自体が正しくない、ということが推測されます。
61
+ htmlでエラーが返ってくるということは、**postのフォーマット自体が正しくない**、ということが推測されます。
61
62
 
62
63
  ここでrequestを見ると、
63
64
  ```
@@ -71,11 +72,12 @@
71
72
  ```
72
73
  r = session.post(url, json=json.dumps(data))
73
74
  ```
74
- たは、
75
+ としす。
76
+ または、json文字列ではなく、直接辞書を渡したい場合は、
75
77
  ```
76
78
  r = session.post(url, data=data)
77
79
  ```
78
- というようにdataパラメータに引数を渡す必要があります。
80
+ というようにdataパラメータに辞書を渡す必要があります。
79
81
 
80
82
 
81
83
  ## 3