回答編集履歴

1

状況を読み間違えてました。回答を訂正します

2017/05/30 01:05

投稿

shimizukawa
shimizukawa

スコア1847

test CHANGED
@@ -1,21 +1,125 @@
1
+ 状況を読み間違えてました。回答を訂正しました
2
+
3
+
4
+
5
+ -------------
6
+
7
+
8
+
1
9
  ```Python
2
10
 
3
- print(json.loads(data)) # 確認用
11
+ script = soup.find_all("script", {"type": "text/javascript"})[1].get_text()
4
12
 
5
13
  ```
6
14
 
7
15
 
8
16
 
9
- が期待している処理と違ってそうです。
17
+ scriptに代入されているのは文字列ですよね
10
18
 
11
- ファイルの中身と見比べるのであれば、dumpsしたものをプリントるべきでしょう
19
+ json.dumpsはPython「オブジェクト」「JSON文字列に」変換します。
12
20
 
13
- 以下よう書いてみてくだ
21
+ ため、Pythonの「文字列型のデータ」はJSONの「文字列型のデータ」変換れます
14
22
 
15
23
 
16
24
 
17
25
  ```Python
18
26
 
27
+ >>> print(json.dumps('"hello"'))
28
+
19
- print(data) # 確認用
29
+ "\"hello\""
20
30
 
21
31
  ```
32
+
33
+
34
+
35
+ 提示されている例で言うと以下のようになります。
36
+
37
+
38
+
39
+ ```Python
40
+
41
+ >>> script = '{"activity_counts": null, "dummykey": "dummyvalue"}'
42
+
43
+ >>> print(json.dumps(script))
44
+
45
+ "{\"activity_counts\": null, \"dummykey\": \"dummyvalue\"}"
46
+
47
+ ```
48
+
49
+
50
+
51
+ これは、scriptに格納されているのが「すでにJSON表現の文字列」なのをさらにJSONに変換しているために上記のような結果になっています。
52
+
53
+ scriptが「すでにJSON」ならば、ここから2の対処方法が考えられます。
54
+
55
+
56
+
57
+ A: 特にPythonオブジェクトとして操作したいことがないのでそのまま出力する
58
+
59
+
60
+
61
+ ```Python
62
+
63
+ >>> with open("Output.json", "w") as f:
64
+
65
+ ... f.write(script)
66
+
67
+ ```
68
+
69
+
70
+
71
+ B: Pythonとして処理するために一旦Pythonのデータ型に変換する
72
+
73
+
74
+
75
+ ```Python
76
+
77
+ >>> data = json.loads(script)
78
+
79
+ >>> data
80
+
81
+ {'activity_counts': None, 'dummykey': 'dummyvalue'}
82
+
83
+ >>> print(json.dumps(data))
84
+
85
+ {"activity_counts": null, "dummykey": "dummyvalue"}
86
+
87
+ >>> # ここでdataに対してなにか操作をする
88
+
89
+ >>> with open("Output.json", "w") as f:
90
+
91
+ ... json.dump(data, f, indent=4)
92
+
93
+ ```
94
+
95
+
96
+
97
+ -------------------------
98
+
99
+
100
+
101
+ 以前の回答(scriptにPythonの文字列ではない型のデータが入っていると読み違えました)
102
+
103
+
104
+
105
+ > ```Python
106
+
107
+ > print(json.loads(data)) # 確認用
108
+
109
+ > ```
110
+
111
+ >
112
+
113
+ > これが期待している処理と違ってそうです。
114
+
115
+ > ファイルの中身と見比べるのであれば、dumpsしたものをプリントするべきでしょう。
116
+
117
+ > 以下のように書いてみてください。
118
+
119
+ >
120
+
121
+ > ```Python
122
+
123
+ > print(data) # 確認用
124
+
125
+ > ```