質問編集履歴

2

phpの処理を追記

2016/09/28 07:07

投稿

tarofess
tarofess

スコア127

test CHANGED
File without changes
test CHANGED
@@ -95,3 +95,159 @@
95
95
 
96
96
 
97
97
  という出力結果になりましたが、結局try JSONSerialization.jsonObjectで「Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.」のエラーが返ってきます......。
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+ ///追記///
106
+
107
+
108
+
109
+
110
+
111
+ 以下はphp側の処理になります。
112
+
113
+
114
+
115
+
116
+
117
+ ```php
118
+
119
+ class DBHelper {
120
+
121
+
122
+
123
+ public function getDataFromDB() {
124
+
125
+ try {
126
+
127
+ $pdo = new PDO($dsn, $username, $password);
128
+
129
+ $stmt = $pdo->prepare('SELECT * FROM word WHERE speech = ?');
130
+
131
+ $stmt->bindValue(1, $this->getSpeechFromClient());
132
+
133
+ $stmt->execute();
134
+
135
+ $results = $stmt->fetchAll();
136
+
137
+
138
+
139
+ } catch (PDOException $e) {
140
+
141
+ return NULL;
142
+
143
+ }
144
+
145
+
146
+
147
+ $distinctWords = $this->removeDuplication($this->getWordFromClient(), $results);
148
+
149
+
150
+
151
+ return $distinctWords;
152
+
153
+ }
154
+
155
+
156
+
157
+ public function getSpeechFromClient() {
158
+
159
+ $json_string = file_get_contents('php://input');
160
+
161
+ $obj = json_decode($json_string, true);
162
+
163
+
164
+
165
+ return $obj['speech'];
166
+
167
+ }
168
+
169
+
170
+
171
+ public function getWordFromClient() {
172
+
173
+ $clientWord = array();
174
+
175
+
176
+
177
+ $json_string = file_get_contents('php://input');
178
+
179
+ $obj = json_decode($json_string, true);
180
+
181
+
182
+
183
+ foreach($obj['words'] as $value) {
184
+
185
+ array_push($clientWord, $value);
186
+
187
+ }
188
+
189
+
190
+
191
+ return $clientWord;
192
+
193
+ }
194
+
195
+
196
+
197
+ public function removeDuplication($clientData, $serverData) {
198
+
199
+ $serverData = array_diff($serverData, $clientData);
200
+
201
+ shuffle($serverData);
202
+
203
+
204
+
205
+ $data = array();
206
+
207
+ $speech = $this->getSpeechFromClient();
208
+
209
+
210
+
211
+ if (count($serverData) >= 30) {
212
+
213
+ for ($i = 0; $i < 30; $i++) {
214
+
215
+ $data += [$speech => $serverData[$i]['word']];
216
+
217
+ }
218
+
219
+ return $data;
220
+
221
+
222
+
223
+ } else {
224
+
225
+ return NULL;
226
+
227
+ }
228
+
229
+ }
230
+
231
+ }
232
+
233
+
234
+
235
+ ///main///
236
+
237
+
238
+
239
+ $dbhelper = new DBHelper();
240
+
241
+ $words = $dbhelper->getDataFromDB();
242
+
243
+ $jsonWords = json_encode($words);
244
+
245
+
246
+
247
+ echo $jsonWords;
248
+
249
+
250
+
251
+ ?>
252
+
253
+ ```

1

追記依頼の対応

2016/09/28 07:06

投稿

tarofess
tarofess

スコア127

test CHANGED
File without changes
test CHANGED
@@ -75,3 +75,23 @@
75
75
  ここからJSONSerialization.jsonObjectでパースするにはどのようにすればいいでしょうか?
76
76
 
77
77
  どなたかわかる方がいれば教えていただきたいです。よろしくお願いします。
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+ ///追記///
86
+
87
+
88
+
89
+ print(jsonResult)は通ってないので何も出力がされてないです。「as! [String: String]」を削除して、あれから少しphp側もいじるとprint(NSString(data: data!, encoding: String.Encoding.utf8.rawValue))では
90
+
91
+
92
+
93
+ string(1153) "[{"\u540d\u8a5e":"\u30cf\u30b5\u30df"},{"\u540d\u8a5e":"\u30d2\u30e8\u30b3"},..........]
94
+
95
+
96
+
97
+ という出力結果になりましたが、結局try JSONSerialization.jsonObjectで「Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.」のエラーが返ってきます......。